我如何使用 Criteria API 重写一个简单的外键的 where

问题描述 投票:1回答:2

这是我的HQL

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

我认为这里唯一重要的未知数是 determinationRequest.id 是一个 Long.

hibernate jpa criteria criteria-api
2个回答
1
投票

你不需要一定要创建 Join 对象。类似这样的东西应该对你有用。

CriteriaQuery<PayerCriteria> criteriaQuery = criteriaBuilder.createQuery(PayerCriteria.class);

Root<PayerCriteria> root = criteriaQuery.from(PayerCriteria.class);

//where on FK clause can be created like so
Predicate wherePredicate = criteriaBuilder.equal(root.get("determinationRequest").get("id"), determinationRequestId);

//Method call criteriaQuery.distinct(true) ensures the distinctness of items in ResultList.
criteriaQuery.select(root).where(wherePredicate).distinct(true);

Query<PayerCriteria> query = session.createQuery(criteriaQuery);

List<PayerCriteria> payerCriteriaList = query.getResultList();

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());
© www.soinside.com 2019 - 2024. All rights reserved.