簡體   English   中英

Jooq-泛型提取子類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM