JPA:如何修改CriteriaQuery JOIN(添加解码/案例)?

时间:2013-08-04 18:17:44

标签: sql jpa join eclipselink criteria-api

我有一个现有的JPA CriteriaQuery,它连接了几个表:

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

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

我现在需要添加的内容是SQL等效于Oracle的DECODE,如:

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

或者在标准SQL中:

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

所以基本上ItemVisibility表包含了allowance,Customer是否可以看到Item的特定列。

我知道可以使用CriteriaBuilder's selectCase(),但我得到的仍然是一个Expression对象,我不知道它是如何操纵我的JOIN查询的。它需要覆盖查询的列'Item.Name'。

用multiselect()替换这些连接会花费我大量的重构,因为我有更多的连接和表格,而不是上面的例子。

0 个答案:

没有答案