我想知道是否有一个很好的解决方案来构建一个JPQL查询(我的查询过于“富有表现力”,我不能使用Criteria)基于过滤器。
类似的东西:
query = "Select from Ent"
if(parameter!=null){
query += "WHERE field=:parameter"
}
if(parameter2!=null) {
query += "WHERE field2=:parameter2"
}
但我会写两次!!随着参数数量的增加,casuistic爆炸。因为最终都不能为空。
是否有基于过滤器以正确方式构建这些查询的提示?
答案 0 :(得分:4)
为什么不能使用标准like this。
其他选择(不太好的imho):
为每个条件创建两个named queries,然后调用相应的查询。
或者建立一个字符串并使用native query。
哦,你的意思是字符串形成(?):
query = "Select from Ent where 1=1 "
if(parameter!=null){
query += " and field=:parameter"
}
if(parameter2!=null) {
query += " and field2=:parameter2"
}
(我认为字符串形成很难看,但它似乎是要求的)
答案 1 :(得分:2)
select * from Ent
where (field1 = :parameter1 or :parameter1 is null)
and (field2 = :parameter2 or :parameter2 is null)