Как проверить, существует ли запись с определенными значениями поля в БД с JPA? - PullRequest
1 голос
/ 27 июля 2010

Как выразить предложение exists с помощью JPA?

Ответы [ 2 ]

1 голос
/ 04 марта 2012

Сначала (мы находимся в Oracle и имеем ДВОЙНУЮ таблицу):

@Entity()
@Table(name = "DUAL")
@ReadOnly
public class Dual {
    @Id
    String dummy;

    public String getDummy() {
        return dummy;
    }
}

Затем:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Dual> cq = cb.createQuery(Dual.class);

Subquery<ProtokollSatz> sq = cq.subquery(ProtokollSatz.class);
Root<ProtokollSatz> root1 = sq.from(ProtokollSatz.class);
sq.where(
    cb.and(
        cb.equal(root1.<Integer> get("field1"), Integer.valueOf(field1)),
        cb.equal(root1.<Integer> get("field2"), Integer.valueOf(field2))));
cq.where(cb.exists(sq));
TypedQuery<Dual> query = em.createQuery(cq);
boolean ifExists = query.getResultList().size() > 0;

Вы получаете:

SELECT t0.DUMMY FROM DUAL t0 WHERE EXISTS
 (SELECT ? FROM PROTOKOLL_SAETZE t1 WHERE ((t1.FIELD1 = ?) AND (t1.FIELD2 = ?)))

Протестировано сEclipseLink.

0 голосов
/ 27 июля 2010

Exists совершенно легален в JPQL, просто используйте его. Возможно, я не понимаю вопроса, хотя? Это немного кратко:)

SELECT user 
FROM SOUsers user
WHERE EXISTS (SELECT user0 
              FROM SOUsers user0 
              WHERE user0 = user.bestFriendWhoAnswersTheirQuestions
                    and user0.name = 'Roman')
...