从表面上看,JPA标准查询比Hibernate标准查询倒退了一大步。真的是这样吗?

从表面上看,JPA标准查询比Hibernate标准查询倒退了一大步。真的是这样吗?,hibernate,jpa,Hibernate,Jpa,这么大的退步怎么可能是合理的!?!我错过什么了吗?实体管理器版本的可读性太差了 session.createCriteriaEntity.class.addRestrictions.eqid,id.uniqueResult 对 EntityManager em = getEntityManager(); try { CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Transaction> cq =

这么大的退步怎么可能是合理的!?!我错过什么了吗?实体管理器版本的可读性太差了

session.createCriteriaEntity.class.addRestrictions.eqid,id.uniqueResult

EntityManager em = getEntityManager();
try {
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<Transaction> cq = cb.createQuery(Transaction.class);
    Metamodel m = em.getMetamodel();
    EntityType<Transaction> Transaction_ = m.entity(Transaction.class);
    Root<Transaction> transaction = cq.from(Transaction.class);

    // Error here. cannot find symbol. symbol: variable creationDate
    cq.where(cb.between(transaction.get(Transaction_.creationDate), startDate, endDate));

    // I also tried this:
    // cq.where(cb.between(Transaction_.getDeclaredSingularAttribute("creationDate"), startDate, endDate));

    List<Transaction> result = em.createQuery(cq).getResultList();
    return result;
} finally {
    em.close();
}

如果你真的想,你可以使用字符串而不是元模型。。。Hibernate的作者支持JPA标准IIRC。除此之外,它们都比QueryDSL和JDO Typesafe落后了几步。感谢QueryDSL的支持。我在其他地方也听到过,这看起来是个不错的选择!