【问题标题】:How to verify whether a record with certain field values exists in a DB with JPA?如何使用 JPA 验证数据库中是否存在具有某些字段值的记录?
【发布时间】:2010-07-27 17:00:17
【问题描述】:

如何用JPA表达exists子句?

【问题讨论】:

    标签: java jpa orm jpa-2.0


    【解决方案1】:

    首先(我们在 Oracle 上并且有一个 DUAL 表):

    @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 测试。

    【讨论】:

      【解决方案2】:

      Exists 在 JPQL 中是完全合法的,只要使用它。也许我不明白这个问题?这有点简洁:)

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-08
        • 1970-01-01
        • 2017-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多