diff --git a/src/org/redkale/source/EntityInfo.java b/src/org/redkale/source/EntityInfo.java index 4649c5869..a142b5aac 100644 --- a/src/org/redkale/source/EntityInfo.java +++ b/src/org/redkale/source/EntityInfo.java @@ -304,7 +304,7 @@ public final class EntityInfo { } Attribute attr; try { - attr = Attribute.create(cltmp, field, cryptHandler); + attr = Attribute.create(type, cltmp, field, cryptHandler); } catch (RuntimeException e) { continue; } diff --git a/src/org/redkale/util/Attribute.java b/src/org/redkale/util/Attribute.java index 67384f6fc..ebc1a9461 100644 --- a/src/org/redkale/util/Attribute.java +++ b/src/org/redkale/util/Attribute.java @@ -253,6 +253,21 @@ public interface Attribute { return create(clazz, field.getName(), (Class) null, field, (java.lang.reflect.Method) null, (java.lang.reflect.Method) null, null); } + /** + * 根据一个Class和Field生成 Attribute 对象。 + * + * @param 依附类的类型 + * @param 字段类型 + * @param subclass 指定依附的子类 + * @param clazz 指定依附的类 + * @param field 字段,如果该字段不存在则抛异常 + * + * @return Attribute对象 + */ + public static Attribute create(Class subclass, Class clazz, final java.lang.reflect.Field field) { + return create(subclass, clazz, field.getName(), (Class) null, field, (java.lang.reflect.Method) null, (java.lang.reflect.Method) null, null); + } + /** * 根据一个Class和Field生成 Attribute 对象。 * @@ -268,6 +283,22 @@ public interface Attribute { return create(clazz, field.getName(), (Class) null, field, (java.lang.reflect.Method) null, (java.lang.reflect.Method) null, attach); } + /** + * 根据一个Class和Field生成 Attribute 对象。 + * + * @param 依附类的类型 + * @param 字段类型 + * @param subclass 指定依附的子类 + * @param clazz 指定依附的类 + * @param field 字段,如果该字段不存在则抛异常 + * @param attach 附加对象 + * + * @return Attribute对象 + */ + public static Attribute create(Class subclass, Class clazz, final java.lang.reflect.Field field, Object attach) { + return create(subclass, clazz, field.getName(), (Class) null, field, (java.lang.reflect.Method) null, (java.lang.reflect.Method) null, attach); + } + /** * 根据一个Class、field别名和Field生成 Attribute 对象。 * @@ -578,6 +609,28 @@ public interface Attribute { */ @SuppressWarnings("unchecked") public static Attribute create(final Class clazz, String fieldalias, final Class fieldtype, final java.lang.reflect.Field field, java.lang.reflect.Method getter, java.lang.reflect.Method setter, Object attach) { + return create(null, clazz, fieldalias, fieldtype, field, getter, setter, attach); + } + + /** + * 根据Class、字段别名、字段类型、Field、getter和setter方法生成 Attribute 对象。 fieldalias/fieldtype、Field、tgetter、setter不能同时为null. + * + * @param 依附类的类型 + * @param 字段类型 + * @param subclass 指定依附的子类 + * @param clazz 指定依附的类 + * @param fieldalias 字段别名 + * @param fieldtype 字段类型 + * @param field 字段 + * @param getter getter方法 + * @param setter setter方法 + * @param attach 附加对象 + * + * @return Attribute对象 + */ + @SuppressWarnings("unchecked") + public static Attribute create(Class subclass, final Class clazz, String fieldalias, final Class fieldtype, final java.lang.reflect.Field field, java.lang.reflect.Method getter, java.lang.reflect.Method setter, Object attach) { + if (subclass == null) subclass = clazz; if (fieldalias != null && fieldalias.isEmpty()) fieldalias = null; int mod = field == null ? java.lang.reflect.Modifier.STATIC : field.getModifiers(); if (field != null && !java.lang.reflect.Modifier.isStatic(mod) && !java.lang.reflect.Modifier.isPublic(mod)) { @@ -638,6 +691,8 @@ public interface Attribute { generictype = tsetter.getGenericParameterTypes()[0]; } else if (fieldtype == null) { throw new RuntimeException("[" + clazz + "]have no public field or setter or getter"); + } else if (column == null) { + throw new RuntimeException("[" + clazz + "]have no field type"); } final Class pcolumn = column; if (column.isPrimitive()) column = java.lang.reflect.Array.get(java.lang.reflect.Array.newInstance(column, 1), 0).getClass();