我试图通过" generifying"来尽量减少我必须做的一些工作。我的查找表。他们都将int id
作为主键,但我也希望他们能够通过他们的"类型" (无论Enum值是多少)。这是抽象的LookupRecord类
public abstract class LookupRecord<T extends Enum<T>> extends DatabaseRecord {
public static final String TYPE_FIELD_NAME = "type";
@DatabaseField(unique = true, columnName = TYPE_FIELD_NAME)
private T type;
public LookupRecord(T type) {
this.type = type;
}
public T getType() {
return type;
}
}
因此,每当我尝试为任何查找表初始化Dao时,都会出现以下错误:
java.sql.SQLException: Field FieldType:name=type,class=LookupRecord improperly configured as type com.j256.ormlite.field.types.EnumStringType@5e80d5
答案 0 :(得分:0)
他们都将int id作为主键,但我也希望他们能够通过他们的&#34;类型&#34; (无论Enum值是多少)。
@DatabaseField(unique = true, columnName = TYPE_FIELD_NAME) private T type;
是的,由于type erasure,这不会起作用。当ORMLite使用反射调查相关类时,它会尝试查找此字段的枚举常量。它获取的只是类型Enum
,而不是子类中具体的具体Enum类。不幸的是,错误信息指出了这一点。
配置类时,它只知道它是一个枚举。它不知道哪个枚举它是如此,它无法正确配置字段或创建具有适当枚举字段的对象实例。