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