2010-08-16 2 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, но это то, что вы должны искать.

Смежные вопросы