Как написать запрос JPA, где параметр является набором? - PullRequest
5 голосов
/ 16 августа 2010

Предполагая следующий класс, как найти 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

Ответы [ 2 ]

10 голосов
/ 16 августа 2010

Это не так просто. 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 голос
/ 16 августа 2010

SQL будет выглядеть примерно так:

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

К сожалению, я не знаю простого способа сделать это. Если бы вы делали это с необработанным SQL, вам пришлось бы сделать это в два этапа: создать параметр связывания ? для каждого значения в наборе, затем выполнить итерацию по набору и связать каждое значение с его параметром связывания. *

Я не знаю, как сделать это чисто в JPA, но это то, что вы должны искать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...