2010-08-16 8 views
4

En supposant la classe suivante, comment trouvez-vous un Person avec une adresse e-mail particulière?Comment écrire une requête JPA où le paramètre est un ensemble?

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>(); 
} 

Est-ce aussi simple que cela, ou y a-t-il un moyen approprié?

select p from Person p where p.email=:email 

Répondre

7

Ce n'est pas si simple. JPQL fournit à l'opérateur IN pour cela:

select p from Person p, IN(p.email) m where m = :email 

La façon dont les 'anciens' (lecture comme SQL) serait:

select p from Person p join p.email m where m = :email 
0

Le SQL ressemblerait à quelque chose comme ceci:

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

Malheureusement, je ne suis pas au courant d'une façon facile de le faire. Si vous le faites avec SQL brut, vous devrez le faire en deux étapes: créer un paramètre de liaison ? pour chaque valeur de l'ensemble, puis parcourir l'ensemble et lier chaque valeur à son paramètre de liaison.

Je ne suis pas au courant d'un moyen de le faire proprement dans JPA, mais c'est ce que vous devriez rechercher.

Questions connexes