2010-08-16 26 views
4

假設以下班級,您如何找到帶有特定電子郵件地址的Person如何寫參數是一組JPA查詢?

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 

回答

7

這並不容易。 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 
0

的SQL會是這個樣子:

WHERE email IN ('[email protected]', '[email protected]') 

不幸的是,我不知道一個簡單的方法來做到這一點。如果您使用原始SQL執行此操作,則必須分兩步執行:爲集合中的每個值創建一個綁定參數?,然後遍歷該集合並將每個值綁定到其綁定參數。

我不知道如何在JPA中乾淨地做到這一點,但這就是你應該尋找的。