如何使用JPA获取动态Where子句的数据

时间:2015-04-29 12:22:22

标签: java jpa

我是JPA的新手。我目前在WAS 8.5.5中使用JPA2.0

我有一个搜索屏幕,我们有很多搜索条件。现在,我必须在JPA中创建Query,以便用户选择任何条件,它会自动检查DB中的特定列。

我无法找到任何解决方案。在我看来,对于每个搜索条件,我都必须编写新的命名查询。

任何建议或指示都将受到赞赏。

1 个答案:

答案 0 :(得分:2)

您可以在命名查询中执行此操作,但如果它为null,则必须检查每个可能的条件,以避免空值影响结果。注意不必要的内部连接,每个可以为空的关系都应该作为左连接包含在内

select e from Employee e left join e.department d
where (:name is null or e.name = :name)
  and (:email is null or e.email = :email)
  and (:deptId is null or d.id = :deptId)
...

但是,根据可能组合的复杂性,更好的选择可能是不使用命名查询,而是根据所选标准动态构建JPQL。