Jooq - 通用提取子类型

时间:2017-07-26 22:21:09

标签: java mysql database inheritance jooq

我正在考虑一个需要在关系数据库中实现继承的项目。我被迫基于一张桌子来构建它。假设我有A,B和C类型,构造函数A(TypeEnum类型),B(字符串bProp),C(字符串cProp),B和C是A的子类型,表A具有列ID,TYPE,A_PROP,B_PROP。我可以获取A的子类型列表并仅采用特定字段来创建一个Object,就像在follow方法中一样吗?

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

1 个答案:

答案 0 :(得分: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);
}