diff --git a/orm/src/main/java/com/zfoo/orm/cache/EntityCache.java b/orm/src/main/java/com/zfoo/orm/cache/EntityCache.java index 411cfa9b..76b94e54 100644 --- a/orm/src/main/java/com/zfoo/orm/cache/EntityCache.java +++ b/orm/src/main/java/com/zfoo/orm/cache/EntityCache.java @@ -164,7 +164,7 @@ public class EntityCache, E extends IEntity> imple // 如果数据库中不存在则给一个默认值 if (entity == null) { - entity = (E) entityDef.newEntity(pk); + entity = (E) wrapper.newEntity(pk); OrmContext.getAccessor().insert(entity); } pnode = new PNode<>(entity); diff --git a/orm/src/main/java/com/zfoo/orm/cache/wrapper/EnhanceUtils.java b/orm/src/main/java/com/zfoo/orm/cache/wrapper/EnhanceUtils.java index 40a38529..3ffd2dc9 100644 --- a/orm/src/main/java/com/zfoo/orm/cache/wrapper/EnhanceUtils.java +++ b/orm/src/main/java/com/zfoo/orm/cache/wrapper/EnhanceUtils.java @@ -68,6 +68,7 @@ public abstract class EnhanceUtils { Class clazz = entityWrapper.getEntityClass(); Field idField = entityWrapper.getIdField(); Method setIdMethod = entityWrapper.getSetIdMethod(); + Field versionField = entityWrapper.getVersionField(); Method getVersionMethod = entityWrapper.getGetVersionMethod(); Method setVersionMethod = entityWrapper.getSetVersionMethod(); @@ -83,11 +84,11 @@ public abstract class EnhanceUtils { enhanceClazz.addMethod(newEntityMethod); // 定义类实现的接口方法name - CtMethod nameMethod = new CtMethod(classPool.get(String.class.getName()), "versionFieldName", null, enhanceClazz); - nameMethod.setModifiers(Modifier.PUBLIC + Modifier.FINAL); - String nameMethodBody = StringUtils.format("{ return \"{}\"; }", entityWrapper.versionFieldName()); - nameMethod.setBody(nameMethodBody); - enhanceClazz.addMethod(nameMethod); + CtMethod versionFieldNameMethod = new CtMethod(classPool.get(String.class.getName()), "versionFieldName", null, enhanceClazz); + versionFieldNameMethod.setModifiers(Modifier.PUBLIC + Modifier.FINAL); + String versionFieldNameMethodBody = versionField == null ? "{ return null; }" : StringUtils.format("{ return \"{}\"; }", entityWrapper.versionFieldName()); + versionFieldNameMethod.setBody(versionFieldNameMethodBody); + enhanceClazz.addMethod(versionFieldNameMethod); // 定义类实现的接口方法gvs CtMethod gvsMethod = new CtMethod(classPool.get(long.class.getName()), "gvs", classPool.get(new String[]{IEntity.class.getName()}), enhanceClazz); diff --git a/orm/src/main/java/com/zfoo/orm/cache/wrapper/EntityWrapper.java b/orm/src/main/java/com/zfoo/orm/cache/wrapper/EntityWrapper.java index 6463dac7..6e41a509 100644 --- a/orm/src/main/java/com/zfoo/orm/cache/wrapper/EntityWrapper.java +++ b/orm/src/main/java/com/zfoo/orm/cache/wrapper/EntityWrapper.java @@ -29,8 +29,9 @@ public class EntityWrapper implements IEntityWrapper { private Class> entityClass; private Field idField; - private Field versionField; private Method setIdMethod; + // ----------------------------------------------------------------------------------------------------------------- + private Field versionField; private Method getVersionMethod; private Method setVersionMethod; @@ -61,7 +62,10 @@ public class EntityWrapper implements IEntityWrapper { @Override public String versionFieldName() { - return idField.getName(); + if (versionField == null) { + return null; + } + return versionField.getName(); } @Override diff --git a/orm/src/main/java/com/zfoo/orm/manager/OrmManager.java b/orm/src/main/java/com/zfoo/orm/manager/OrmManager.java index 86aa037e..dd123d77 100644 --- a/orm/src/main/java/com/zfoo/orm/manager/OrmManager.java +++ b/orm/src/main/java/com/zfoo/orm/manager/OrmManager.java @@ -396,7 +396,7 @@ public class OrmManager implements IOrmManager { indexTextDefMap.put(field.getName(), indexTextDef); } - return EntityDef.valueOf(idField, clazz, !hasUnsafeCollection, cacheStrategy.getSize(), cacheStrategy.getExpireMillisecond(), persisterStrategy, indexDefMap, indexTextDefMap); + return EntityDef.valueOf(clazz, !hasUnsafeCollection, cacheStrategy.getSize(), cacheStrategy.getExpireMillisecond(), persisterStrategy, indexDefMap, indexTextDefMap); } private void checkEntity(Class clazz) { diff --git a/orm/src/main/java/com/zfoo/orm/model/EntityDef.java b/orm/src/main/java/com/zfoo/orm/model/EntityDef.java index 6a0fbbe7..caae6fe0 100644 --- a/orm/src/main/java/com/zfoo/orm/model/EntityDef.java +++ b/orm/src/main/java/com/zfoo/orm/model/EntityDef.java @@ -12,11 +12,8 @@ package com.zfoo.orm.model; -import com.zfoo.orm.anno.Id; import com.zfoo.orm.config.PersisterStrategy; -import com.zfoo.protocol.util.ReflectionUtils; -import java.lang.reflect.Field; import java.util.Map; /** @@ -24,8 +21,6 @@ import java.util.Map; */ public class EntityDef { - private Field idField; - private Class> clazz; // 线程安全指的是内部没有使用集合或者使用的集合全部支持并发操作 @@ -42,10 +37,9 @@ public class EntityDef { private Map indexTextDefMap; - public static EntityDef valueOf(Field idField, Class> clazz, boolean threadSafe, int cacheSize, long expireMillisecond + public static EntityDef valueOf(Class> clazz, boolean threadSafe, int cacheSize, long expireMillisecond , PersisterStrategy persisterStrategy, Map indexDefMap, Map indexTextDefMap) { var entityDef = new EntityDef(); - entityDef.idField = idField; entityDef.clazz = clazz; entityDef.threadSafe = threadSafe; entityDef.cacheSize = cacheSize; @@ -56,18 +50,6 @@ public class EntityDef { return entityDef; } - public IEntity newEmptyEntity() { - var entity = ReflectionUtils.newInstance(clazz); - return entity; - } - - public IEntity newEntity(Object id) { - var entity = ReflectionUtils.newInstance(clazz); - var idFields = ReflectionUtils.getFieldsByAnnoInPOJOClass(clazz, Id.class); - ReflectionUtils.makeAccessible(idFields[0]); - ReflectionUtils.setField(idFields[0], entity, id); - return entity; - } public Class> getClazz() { return clazz; } diff --git a/orm/src/test/java/com/zfoo/orm/cache/EntityCachesTest.java b/orm/src/test/java/com/zfoo/orm/cache/EntityCachesTest.java index e07301fe..ff86a2d3 100644 --- a/orm/src/test/java/com/zfoo/orm/cache/EntityCachesTest.java +++ b/orm/src/test/java/com/zfoo/orm/cache/EntityCachesTest.java @@ -14,10 +14,10 @@ package com.zfoo.orm.cache; import com.mongodb.client.model.Filters; -import com.zfoo.event.manager.EventBus; import com.zfoo.orm.OrmContext; import com.zfoo.orm.entity.MailEntity; import com.zfoo.orm.entity.UserEntity; +import com.zfoo.protocol.util.StringUtils; import com.zfoo.protocol.util.ThreadUtils; import com.zfoo.scheduler.util.TimeUtils; import org.bson.Document; @@ -53,7 +53,7 @@ public class EntityCachesTest { for (var i = 1; i <= 10; i++) { for (var j = 1; j <= 10; j++) { var entity = userEntityCaches.load((long) j); - entity.setE("update" + j); + entity.setE(StringUtils.format("update-{}-{}", i, j)); entity.setC(j); userEntityCaches.update(entity); }