diff --git a/pom.xml b/pom.xml index 4ae40c5..0250175 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 kangaroo-and-rabbit archidata - 0.3.2 + 0.3.3 3.1.1 2.3.1 @@ -50,6 +50,10 @@ org.glassfish.jersey.media jersey-media-multipart + + org.glassfish.jersey.core + jersey-client + org.glassfish.jersey.inject jersey-hk2 diff --git a/src/org/kar/archidata/SqlWrapper.java b/src/org/kar/archidata/SqlWrapper.java index 3d2aa77..00a1c94 100644 --- a/src/org/kar/archidata/SqlWrapper.java +++ b/src/org/kar/archidata/SqlWrapper.java @@ -30,6 +30,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.kar.archidata.annotation.SQLCreateTime; import org.kar.archidata.annotation.SQLDefault; +import org.kar.archidata.annotation.SQLDeleted; public class SqlWrapper { @@ -706,6 +707,7 @@ public class SqlWrapper { boolean firstField = true; int count = 0; + boolean hasDeleted = false; for (Field elem : clazz.getFields()) { ModelLink linkGeneric = getLinkMode(elem); if (linkGeneric != ModelLink.NONE) { @@ -715,6 +717,9 @@ public class SqlWrapper { if (!full && createTime) { continue; } + if (!hasDeleted) { + hasDeleted = elem.getDeclaredAnnotationsByType(SQLDeleted.class).length != 0; + } String name = elem.getName(); boolean updateTime = elem.getDeclaredAnnotationsByType(SQLUpdateTime.class).length != 0; if (!full && updateTime) { @@ -735,7 +740,7 @@ public class SqlWrapper { query.append(" FROM `"); query.append(tableName); query.append("` "); - whereAppendQuery(query, tableName, condition, true); + whereAppendQuery(query, tableName, condition, firstField); if (orderBy != null && orderBy.length() >= 1) { query.append(" ORDER BY "); //query.append(tableName); @@ -751,7 +756,7 @@ public class SqlWrapper { query.append(".deleted = false "); */ firstField = true; - //System.out.println("generate the query: '" + query.toString() + "'"); + System.out.println("generate the query: '" + query.toString() + "'"); // prepare the request: PreparedStatement ps = entry.connection.prepareStatement(query.toString(), Statement.RETURN_GENERATED_KEYS); whereInjectValue(ps, condition); diff --git a/src/org/kar/archidata/annotation/SQLDeleted.java b/src/org/kar/archidata/annotation/SQLDeleted.java new file mode 100644 index 0000000..681700a --- /dev/null +++ b/src/org/kar/archidata/annotation/SQLDeleted.java @@ -0,0 +1,12 @@ +package org.kar.archidata.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface SQLDeleted { + +} diff --git a/src/org/kar/archidata/model/GenericTable.java b/src/org/kar/archidata/model/GenericTable.java index b35627f..5a3a7db 100644 --- a/src/org/kar/archidata/model/GenericTable.java +++ b/src/org/kar/archidata/model/GenericTable.java @@ -6,6 +6,7 @@ import org.kar.archidata.annotation.SQLAutoIncrement; import org.kar.archidata.annotation.SQLComment; import org.kar.archidata.annotation.SQLCreateTime; import org.kar.archidata.annotation.SQLDefault; +import org.kar.archidata.annotation.SQLDeleted; import org.kar.archidata.annotation.SQLNotNull; import org.kar.archidata.annotation.SQLNotRead; import org.kar.archidata.annotation.SQLPrimaryKey; @@ -20,6 +21,7 @@ public class GenericTable { @SQLNotRead @SQLNotNull @SQLDefault("'0'") + @SQLDeleted @SQLComment("When delete, they are not removed, they are just set in a deleted state") public Boolean deleted = null; @SQLNotRead