【问题标题】:EntityGraph and TypedQuery simultaneouslyEntityGraph 和 TypedQuery 同时
【发布时间】:2021-02-26 15:03:09
【问题描述】:

我正在尝试同时使用两个 Hibernate 功能:EntityGraph 和 Criteria API TypedQuery,但无法解决如何一起使用它们:

@Override
public List<Customer> findByFilterEntityGraph(final CustomerFilter filter) {
    final EntityManager entityManager = sessionFactory.createEntityManager();
    final CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
    final CriteriaQuery<Customer> criteriaQuery = criteriaBuilder.createQuery(Customer.class);
    final Root<Customer> customerMetamodel = criteriaQuery.from(Customer.class);
    final Predicate name = criteriaBuilder.like(customerMetamodel.get("name"), filter.getName());
    final Predicate age = criteriaBuilder.between(
            customerMetamodel.get("age"), filter.getAgeFrom(), filter.getAgeTo());
    final Predicate predicate = criteriaBuilder.and(name, age);
    criteriaQuery.where(predicate);

    final TypedQuery<Customer> query = entityManager.createQuery(criteriaQuery);
    final EntityGraph<?> entityGraph = entityManager.getEntityGraph("customer.products");
    Map<String, Object> properties = Map.of("javax.persistence.fetchgraph", entityGraph);

    // ... ?
    return null;
}

我确定我的EntityGraph 声明正确,因为它在其他地方也可以使用。但我找不到如何使用它们。

我知道这样的方法:

public Optional<Customer> findByIdEntityGraph(final long customerId) {
    final EntityManager entityManager = sessionFactory.createEntityManager();
    final EntityGraph<?> entityGraph = entityManager.getEntityGraph("customer.products");
    Map<String, Object> properties = Map.of("javax.persistence.fetchgraph", entityGraph);
    final Customer customer = entityManager.find(Customer.class, customerId, properties);
    return Optional.ofNullable(customer);
}

允许将 Criteria API 与 EntityGraph 一起使用,但对于单一结果且没有条件,如使用 TypedQuery 的过滤器。

列表可以同时使用EntityGraphTypedQuery吗?

【问题讨论】:

    标签: java hibernate hibernate-criteria criteria-api criteriaquery


    【解决方案1】:

    是的,这是允许的。我认为您只是错误地使用了获取图,而您应该使用的是负载图:https://docs.oracle.com/javaee/7/tutorial/persistence-entitygraphs001.htm

    【讨论】:

      猜你喜欢
      • 2020-09-25
      • 2018-03-24
      • 2017-09-29
      • 1970-01-01
      • 2020-08-18
      • 1970-01-01
      • 2015-09-21
      • 2014-12-05
      • 2015-02-17
      相关资源
      最近更新 更多