如何使用Criteria API重写外键上的简单位置

时间:2014-10-10 18:15:04

标签: hibernate jpa criteria criteria-api

这是我的HQL

select distinct p from PayerCriteria p where p.determinationRequest.id = :determinationRequestId

我认为唯一重要的未知因素是determinationRequest.idLong

2 个答案:

答案 0 :(得分:1)

您不必像@uaiHebert所提到的那样创建Join对象。您可以使用以下方法创建hql查询的where谓词:

mvn pact:verify

我在下面的代码中添加了注释,以解释各行的作用。

dict

答案 1 :(得分:0)

如果您想使用CriteriaAPI,则需要执行以下操作:

    final CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
    final CriteriaQuery<PayerCriteria> criteriaQuery = criteriaBuilder.createQuery(PayerCriteria.class);
    final Root<PayerCriteria> root = criteriaQuery.from(PayerCriteria.class);
    criteriaQuery.select(root);

    final Join join = root.join("determinationRequest");

    final Predicate predicate = criteriaBuilder.equal(join.get("id"), 1);
    criteriaQuery.where(predicate);

    final TypedQuery<PayerCriteria> query = entityManager.createQuery(criteriaQuery);

    System.out.println("------------>" + query.getResultList());

有一个框架可以使负担更容易命名为EasyCriteria(http://easycriteria.uaihebert.com)。上述标准如下:

    EasyCriteria<RegularEntityOne> easyCriteria = EasyCriteriaFactory.createQueryCriteria(entityManager, RegularEntityOne.class);
    easyCriteria.innerJoin("regularEntityTwo");
    easyCriteria.andEquals("regularEntityTwo.id", 1);

    System.out.println("------------>" + easyCriteria.getResultList());