roo00 6 лет назад
Родитель
Сommit
304f0fa130

+ 18 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/container/EntityManagerContainer.java

@@ -463,6 +463,24 @@ public class EntityManagerContainer extends EntityManagerContainerBasic {
 		return em.createQuery(cq).getSingleResult();
 	}
 
+	public <T extends JpaObject> Long countNotEqual(Class<T> cls, String attribute, Object value) throws Exception {
+		EntityManager em = this.get(cls);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Long> cq = cb.createQuery(Long.class);
+		Root<T> root = cq.from(cls);
+		cq.select(cb.count(root)).where(cb.notEqual(root.get(attribute), value));
+		return em.createQuery(cq).getSingleResult();
+	}
+
+	public <T extends JpaObject> Long countIsNull(Class<T> cls, String attribute) throws Exception {
+		EntityManager em = this.get(cls);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Long> cq = cb.createQuery(Long.class);
+		Root<T> root = cq.from(cls);
+		cq.select(cb.count(root)).where(cb.isNull(root.get(attribute)));
+		return em.createQuery(cq).getSingleResult();
+	}
+
 	public <T extends JpaObject> Long countEqualAndEqual(Class<T> cls, String euqalAttribute, Object equalValue,
 			String otherEqualAttribute, Object otherEqualValue) throws Exception {
 		EntityManager em = this.get(cls);

+ 5 - 7
o2server/x_base_core_project/src/main/java/com/x/base/core/container/factory/SliceEntityManagerContainerFactory.java

@@ -89,7 +89,7 @@ public abstract class SliceEntityManagerContainerFactory {
 			checkPersistFieldMap.put(clz, this.loadCheckPersistField(clz));
 			checkRemoveFieldMap.put(clz, this.loadCheckRemoveField(clz));
 			entityManagerFactoryMap.put(clz,
-					OpenJPAPersistence.createEntityManagerFactory(clz.getCanonicalName(), PERSISTENCE_XML_PATH));
+					OpenJPAPersistence.createEntityManagerFactory(clz.getName(), PERSISTENCE_XML_PATH));
 			List<Field> flagFields = new ArrayList<>();
 			List<Field> restrictFlagFields = new ArrayList<>();
 			for (Field o : FieldUtils.getFieldsListWithAnnotation(clz, Id.class)) {
@@ -112,9 +112,8 @@ public abstract class SliceEntityManagerContainerFactory {
 		Set<Class<? extends JpaObject>> classes = this.listUitClass(source);
 		for (Class<? extends JpaObject> clz : classes) {
 			checkPersistFieldMap.put(clz, this.loadCheckPersistField(clz));
-			checkRemoveFieldMap.put(clz, loadCheckRemoveField(clz));
-			entityManagerFactoryMap.put(clz,
-					OpenJPAPersistence.createEntityManagerFactory(clz.getCanonicalName(), source));
+			checkRemoveFieldMap.put(clz, this.loadCheckRemoveField(clz));
+			entityManagerFactoryMap.put(clz, OpenJPAPersistence.createEntityManagerFactory(clz.getName(), source));
 		}
 	}
 
@@ -140,10 +139,10 @@ public abstract class SliceEntityManagerContainerFactory {
 				unit.addAttribute("name", className);
 				unit.addAttribute("transaction-type", "RESOURCE_LOCAL");
 				Element provider = unit.addElement("provider");
-				provider.addText(PersistenceProviderImpl.class.getCanonicalName());
+				provider.addText(PersistenceProviderImpl.class.getName());
 				for (Class<?> o : JpaObjectTools.scanMappedSuperclass(clazz)) {
 					Element mapped_element = unit.addElement("class");
-					mapped_element.addText(o.getCanonicalName());
+					mapped_element.addText(o.getName());
 				}
 				Element slice_unit_properties = unit.addElement("properties");
 				for (Entry<String, String> entry : SlicePropertiesBuilder.getPropertiesDBCP(dataMappings.get(className))
@@ -224,7 +223,6 @@ public abstract class SliceEntityManagerContainerFactory {
 			if (null != checkPersist) {
 				map.put(fld, checkPersist);
 			}
-
 		}
 		return map;
 	}

+ 2 - 1
o2server/x_base_core_project/src/main/java/com/x/base/core/container/factory/SlicePropertiesBuilder.java

@@ -79,7 +79,8 @@ public class SlicePropertiesBuilder {
 			properties.put("openjpa.IgnoreChanges", "true");
 			properties.put("openjpa.QueryCache", "false");
 			properties.put("openjpa.jdbc.ResultSetType", "scroll-insensitive");
-			// properties.put("openjpa.DynamicEnhancementAgent", "true");
+			/* 如果启用本地初始化会导致classLoad的问题 */
+			properties.put("openjpa.DynamicEnhancementAgent", "false");
 			properties.put("openjpa.jdbc.SynchronizeMappings", "buildSchema(ForeignKeys=false)");
 			// properties.put("openjpa.jdbc.SchemaFactory",
 			// "native(ForeignKeys=false)");