|
|
@@ -32,6 +32,7 @@ import com.x.base.core.entity.annotation.CheckPersist;
|
|
|
import com.x.base.core.entity.annotation.CheckPersistType;
|
|
|
import com.x.base.core.entity.annotation.CheckRemove;
|
|
|
import com.x.base.core.entity.annotation.CheckRemoveType;
|
|
|
+import com.x.base.core.entity.annotation.RestrictFlag;
|
|
|
import com.x.base.core.entity.tools.JpaObjectTools;
|
|
|
import com.x.base.core.project.bean.WrapCopier;
|
|
|
import com.x.base.core.project.exception.ExceptionWhen;
|
|
|
@@ -1236,6 +1237,27 @@ public class EntityManagerContainer extends EntityManagerContainerBasic {
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
+// public <T extends JpaObject> String conflict(Class<T> clz, T t) throws Exception {
|
|
|
+// EntityManager em = this.get(clz);
|
|
|
+// CriteriaBuilder cb = em.getCriteriaBuilder();
|
|
|
+// for (Field field : this.entityManagerContainerFactory.getFlagFields(clz)) {
|
|
|
+// Object value = t.get(field.getName());
|
|
|
+// if ((null != value) && StringUtils.isNotEmpty(Objects.toString(value))) {
|
|
|
+// CriteriaQuery<Long> cq = cb.createQuery(Long.class);
|
|
|
+// Root<T> root = cq.from(clz);
|
|
|
+// Predicate p = cb.disjunction();
|
|
|
+// for (Field f : this.entityManagerContainerFactory.getFlagFields(clz)) {
|
|
|
+// p = cb.or(p, cb.equal(root.get(f.getName()), value));
|
|
|
+// }
|
|
|
+// p = cb.and(p, cb.notEqual(root.get(JpaObject.id_FIELDNAME), t.getId()));
|
|
|
+// if (em.createQuery(cq.select(cb.count(root)).where(p)).getSingleResult() > 0) {
|
|
|
+// return field.getName() + ":" + Objects.toString(value);
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+// return null;
|
|
|
+// }
|
|
|
+
|
|
|
public <T extends JpaObject> String conflict(Class<T> clz, T t) throws Exception {
|
|
|
EntityManager em = this.get(clz);
|
|
|
CriteriaBuilder cb = em.getCriteriaBuilder();
|
|
|
@@ -1254,6 +1276,29 @@ public class EntityManagerContainer extends EntityManagerContainerBasic {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ for (Field field : this.entityManagerContainerFactory.getRestrictFlagFields(clz)) {
|
|
|
+ Object value = t.get(field.getName());
|
|
|
+ if ((null != value) && StringUtils.isNotEmpty(Objects.toString(value))) {
|
|
|
+ RestrictFlag restrictFlag = field.getAnnotation(RestrictFlag.class);
|
|
|
+ if ((null != restrictFlag) && restrictFlag.fields().length > 0) {
|
|
|
+ CriteriaQuery<Long> cq = cb.createQuery(Long.class);
|
|
|
+ Root<T> root = cq.from(clz);
|
|
|
+ Predicate p = cb.disjunction();
|
|
|
+ for (Field f : this.entityManagerContainerFactory.getFlagFields(clz)) {
|
|
|
+ Object v = t.get(f.getName());
|
|
|
+ if ((null != v) && StringUtils.isNotEmpty(Objects.toString(v))) {
|
|
|
+ p = cb.or(cb.equal(root.get(f.getName()), v));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ p = cb.and(p, cb.equal(root.get(field.getName()), value));
|
|
|
+ p = cb.and(p, cb.notEqual(root.get(JpaObject.id_FIELDNAME), t.getId()));
|
|
|
+ if (em.createQuery(cq.select(cb.count(root)).where(p)).getSingleResult() > 0) {
|
|
|
+ return field.getName() + ":" + Objects.toString(value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
return null;
|
|
|
}
|
|
|
+
|
|
|
}
|