5

假设以下课程,您如何找到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
4

2 回答 2

10

那并没那么简单。JPQLIN为此提供了运算符:

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
于 2010-08-16T09:49:54.900 回答
1

SQL 看起来像这样:

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

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

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

于 2010-08-16T09:47:49.553 回答