0

複数のテーブルを結合する既存の JPA CriteriaQuery を取得しました。

CriteriaQuery<Customer> cq = cb.createQuery(Customer.class);

Root<Customer> customer= cq.from(Customer.class);
Join<Item, ItemVisibility> itemJoin= ...
Join<Customer, ItemVisibility> customerJoin= ...

今追加する必要があるのは、次のような Oracle の DECODE に相当する SQL です。

DECODE(ItemVisibility.isNameVisible, Item.Name, NULL)

または標準 SQL では:

CASE
WHEN ItemVisibility.isNameVisible
THEN Item.Name
ELSE NULL
END

したがって、基本的に ItemVisibility テーブルには、顧客がアイテムの特定の列を表示できるかどうかに関係なく、許可が含まれています。

CriteriaBuilder の selectCase()を使用できることはわかっていますが、そこから得られるのは Expression オブジェクトであり、JOIN クエリをどのように操作できるかはわかりません。クエリされた列「Item.Name」をオーバーライドする必要があります。

これらの結合を multiselect() に置き換えると、上記の例で表現したよりもはるかに多くの結合とテーブルがあるため、恐ろしい量のリファクタリングが必要になります。

4

0 に答える 0