【发布时间】:2017-12-21 07:58:10
【问题描述】:
我有查询哪些按特定条件过滤项目:
@NamedQueries({
@NamedQuery(
name = ITEM.FIND_ALL_PARAMS_BY_COMPANY_COUNTRY_GROUP,
query = "SELECT i FROM Item i where "
+ "((i.idCompany=:companyId AND i.idEMGroup=:groupId) "
+ "OR (i.idCompany=:companyId AND i.idEMCountry =:countryId AND i.idEMGroup is null) "
+ "OR (i.idCompany is null AND i.idEMCountry = :countryId AND i.idEMGroup is null)) "
+ "order by i.idEMCountry desc, i.idCompany desc, i.idEMGroup desc")
})
在某些情况下,参数 idEMGroup o companyId 可以为 null,这会生成类似于 IdEmCompany = 200630758) AND (IdEMGroup = NULL) 的 sql 并且不正确 sql 语法是否可以动态地将它的值为 null 为 'Column IS NULL' 而不是 'Column = NULL' 而无需添加大量 if,或者最好使用 Criteria API重写此查询> 只需检查值是否存在并在某些条件下添加谓词?
【问题讨论】:
标签: java database jpa orm persistence