Разница в использовании критериев выборки запроса и createcriteria.setFechMode - PullRequest
1 голос
/ 28 января 2020

Я новичок в Hibernate. Я определил @ManyToOne отношения Ленивый. Поэтому я использовал следующий код для извлечения нужных данных.

Criteria criteria = createEntityCriteria()
        .addOrder(Order.asc("id"))
        .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
        .setFetchMode("unit", FetchMode.JOIN)
        .setFetchMode("manufacturer",FetchMode.JOIN)
        .setFetchMode("brand",FetchMode.JOIN)
        .setFetchMode("preferred_supplier",FetchMode.JOIN);

Это работало нормально. Но затем я использовал этот код, чтобы сделать то же самое.

CriteriaBuilder cb = getCriteriaBuilder();
CriteriaQuery<Product> q = cb.createQuery(Product.class);
Root o = q.from(Product.class);
o.fetch("unit", JoinType.LEFT);
o.fetch("manufacturer",JoinType.LEFT);
o.fetch("brand",JoinType.LEFT);
o.fetch("preferred_supplier",JoinType.LEFT);
q.select(o);
q.where(cb.equal(o.get("id"), id));

Результат был таким же. Я хотел знать, в чем разница, и какой подход лучше или рекомендуется. Спасибо

1 Ответ

0 голосов
/ 28 января 2020

Согласно это

Hibernate предлагает более старый, устаревший org.hibernate.Criteria API, который следует считать устаревшим. Никакая разработка функций не будет нацелена на эти API. В конце концов, специфичные для Hibernate функции c Criteria будут перенесены в качестве расширений в JPA javax.persistence.criteria.CriteriaQuery.

Таким образом, вы должны использовать javax.persistence.criteria.CriteriaQuery вместо устаревших org.hibernate.Criteria.

...