如何在参数动态时构建JPQL查询?

时间:2011-09-08 09:00:40

标签: java hibernate jpa ejb jpql

我想知道是否有一个很好的解决方案来构建一个JPQL查询(我的查询过于“富有表现力”,我不能使用Criteria)基于过滤器。

类似的东西:

query = "Select from Ent"
if(parameter!=null){
   query += "WHERE field=:parameter"
}
if(parameter2!=null) {
   query += "WHERE field2=:parameter2"
}

但我会写两次!!随着参数数量的增加,casuistic爆炸。因为最终都不能为空。

是否有基于过滤器以正确方式构建这些查询的提示?

2 个答案:

答案 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)