假设以下课程,您如何找到具有特定电子邮件地址的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
答案 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中干净利落的方法,但这就是你应该寻找的。 p>