[英]Jooq - generic fetching to subtypes
我正在担心需要在关系数据库中实现继承的项目。 我被迫基于一张桌子建造它。 假设我有A,B和C类型,构造函数A(TypeEnum类型),B(String bProp),C(String cProp),B和C是A的子类型,表A的列ID,TYPE,A_PROP,B_PROP。 我可以像下面的方法那样获取A的子类型列表并仅采用特定的字段来创建对象吗?
List<? extends A> findAll(Class<? extends A> clazz) {
return dsl.selectFrom(A)
.where(A.TYPE.eq(clazz.getSimpleName()))
.fetchInto(clazz);}
当然。 更加详细:
public <T extends A> List<T> findAll(Class<T> clazz) {
Table<?> table;
if (clazz == B.class)
table = B_TABLE;
else if (clazz == C.class)
table = C_TABLE;
else
throw new IllegalArgumentException("Class not supported: " + clazz);
return dsl.selectFrom(table)
// For convenience, we can use just any table's TYPE column to get type
// safety. Of course, you could abstract over the TYPE column, too...
.where(table.field(B_TABLE.TYPE).eq(clazz.getSimpleName()))
.fetchInto(clazz);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.