Java 如何使用JPA for dynamic Where子句获取数据

Java 如何使用JPA for dynamic Where子句获取数据,java,jpa,Java,Jpa,我是JPA的新手。我目前正在WAS8.5.5中使用JPA2.0 我有一个搜索屏幕,我们有很多搜索条件。现在,我必须在JPA中创建一个这样的查询:任何用户选择的条件,它都会自动检查DB中的特定列 我找不到任何解决办法。在我看来,对于每个搜索条件,我都必须编写新的命名查询 任何建议或指针都将不胜感激。您可以在命名查询中执行此操作,但您必须检查每个可能的条件是否为空,以避免空值影响结果。注意不必要的内部联接,每个可为空的关系都应作为左联接包含 select e from Employee e left

我是JPA的新手。我目前正在WAS8.5.5中使用JPA2.0

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

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


任何建议或指针都将不胜感激。

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

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