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

标签 java jpa

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

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

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

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

最佳答案

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

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。

关于java - 如何使用 JPA 获取动态Where子句数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29943631/

相关文章:

java - Intellij IDEA for java 上的 UnitTest 自动运行器

java - 如果某个线程使对象为 null 而另一个线程在该对象的方法内部,会发生什么

java - java ee 应用程序如何托管在服务器上

java - JPA中两个关系中的一个参数

jpa - 如何在JPA实体中添加列并仍然保留数据?

java - JPA、Hibernate - 处理包含在 RollbackException 中的 ContraintViolationException

java - 对称依赖

java - jaxb 是否有可能在基于 xsd 的验证过程中显示更多错误

Hibernate:具有级联=“all-delete-orphan”的集合不再被拥有的实体实例引用

java - 如何更正此示例 JPA Java 应用程序?