如何编写JPA查询,其中参数是一个集合?

时间:2010-08-16 09:40:04

标签: java jpa jpql

假设以下课程,您如何找到具有特定电子邮件地址的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

2 个答案:

答案 0 :(得分:10)

这并不容易。 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

答案 1 :(得分:1)

SQL看起来像这样:

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

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

我不知道在JPA中干净利落的方法,但这就是你应该寻找的。