【问题标题】:How to write JPA query where parameter is a set?如何编写参数为集合的 JPA 查询?
【发布时间】:2011-03-30 08:28:20
【问题描述】:

假设以下课程,您如何找到具有特定电子邮件地址的Person

public class Person implements Comparable<Person> {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="id")
    private long id = 0;

    @OneToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE}, fetch=FetchType.LAZY)
    private Set<String> email = new HashSet<String>();
}

就这么简单,还是有合适的方法?

select p from Person p where p.email=:email

【问题讨论】:

    标签: java jpa jpql


    【解决方案1】:

    这并不容易。 JPQL 为此提供了IN 运算符:

    select p from Person p, IN(p.email) m where m = :email
    

    “旧”方式(类似 SQL 的读取方式)是:

    select p from Person p join p.email m where m = :email
    

    【讨论】:

      【解决方案2】:

      SQL 看起来像这样:

      WHERE email IN ('foo@yahoo.com', 'bar@gmail.com')
      

      很遗憾,我不知道有什么简单的方法可以做到这一点。如果您使用原始 SQL 执行此操作,则必须分两步执行:为集合中的每个值创建一个绑定参数 ?,然后遍历集合并将每个值绑定到其绑定参数。

      我不知道有一种方法可以在 JPA 中干净地做到这一点,但这正是您应该寻找的。​​p>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-01
        • 2011-03-22
        • 1970-01-01
        • 2021-05-01
        • 2016-03-28
        • 2020-06-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多