0
我在java中使用ormlite进行数据库交互。工作正常。Ormlite:使用泛型作为id的类型
现在我想创建一个通用的实体类。也许我会从一些代码开始解释它。
AbstractId有点象一个基类的所有ID:
public abstract class AbstractId {
public AbstractId(String id) {
this.id = id;
}
public String value() {
return this.id;
}
}
扩展到:
public class SampleId extends AbstractId {
public SampleId(String id) {
super(id);
}
}
现在我有一个抽象的基础机构,以节省一些打字;)
public abstract class AbstractEntity<T> {
@DatabaseField(id = true, columnName = "id")
private T id;
@DatabaseField(columnName = "name", canBeNull = false)
private String name;
public AbstractEntity() {
}
}
它由一个样本实体扩展:
@DatabaseTable(tableName = "sample")
public class SampleEntity<T extends AbstractId> extends AbstractEntity<T> {
@DatabaseField(canBeNull = false, columnName = "key")
private String otherValue;
public SampleEntity() {
}
}
那么我该如何坚持T?实体实例由
SampleEntity<SampleId> entity = new SampleEntity<>() // (*)
我试图创建一个新的BaseDataType并设置DatabaseField创建以此为persisterClass:
public class AbstractIdPersister extends BaseDataType {
public AbstractIdPersister(SqlType sqlType, Class<?>[] classes) {
super(sqlType, classes);
}
@Override
public Object parseDefaultString(FieldType fieldType, String defaultStr)
throws SQLException {
return null;
}
@Override
public Object javaToSqlArg(FieldType fieldType, Object obj) {
AbstractId abstractId = (AbstractId) obj;
return abstractId.value();
}
@Override
public Object sqlArgToJava(FieldType fieldType, Object sqlArg, int columnPos)
throws SQLException {
// HOW DO I GET THE GENERIC TYPE DEFINED ABOVE (*)
}
@Override
public Object resultToSqlArg(FieldType fieldType, DatabaseResults results,
int columnPos) throws SQLException {
return results.getString(columnPos);
}
}
没有工作......当然..
有没有人有任何想法如何解决这个问题?谢谢!
灰色 请建议为https://stackoverflow.com/questions/45989326/create-databasefield-with-generic-type-as-a-foreign-key-relation-in-ormlite某种方式 – 2017-09-01 21:14:57