2017-07-26 86 views
0

我在一个需要在关系数据库中实现继承的项目上工作。我不得不基于一张桌子来构建它。假设我有A,B和C类型,构造函数A(TypeEnum类型),B(String bProp),C(String cProp),B和C是A的子类型,而表A有ID,TYPE,A_PROP,B_PROP列。我可以获取A的子类型列表,并只需要一个特定的字段来创建一个对象,如跟随方法?Jooq - 泛型获取子类型

List<? extends A> findAll(Class<? extends A> clazz) { 
    return dsl.selectFrom(A) 
     .where(A.TYPE.eq(clazz.getSimpleName())) 
     .fetchInto(clazz);} 

回答

1

当然可以。有点更详细:

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); 
} 
+0

我的意思是我有任何存在类型的单个表。 BTW。我找到了解决方案。您必须将jpa包中的@Column(value =“COLUMNNAME”)注释添加到您的域类。 –

+0

@JakubRozenbajger:随意为您自己的问题提供一个答案! –