java - 使用 criteriaquery fetch 和 createcriteria.setFechMode 的区别

标签 java hibernate jpa

我是 Hibernate 的新手,我定义了 @ManyToOne 关系 Lazy。 所以我使用以下代码来获取所需的数据。

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));

结果是一样的。 我想知道有什么区别以及更好或推荐的方法是什么。 谢谢

最佳答案

根据this

Hibernate offers an older, legacy org.hibernate.Criteria API which should be considered deprecated. No feature development will target those APIs. Eventually, Hibernate-specific Criteria features will be ported as extensions to the JPA javax.persistence.criteria.CriteriaQuery.

因此,您应该使用 javax.persistence.criteria.CriteriaQuery 而不是过时的 org.hibernate.Criteria

关于java - 使用 criteriaquery fetch 和 createcriteria.setFechMode 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59945082/

相关文章:

Java:存储网格引用的最佳类型

c# - 如何在 Web 应用程序中通过连接到本地计算机的 ACR122U NFC 标签读取器读取 mifare 1k 卡

java - 每个线程都在单独的处理器上 - 这可能吗?

java - 如何使用 Java 在 SQL Server 中持久保存大型 JSON 字符串

java - JPA 嵌套映射到没有基表的 View

java - 使用循环绘制多个形状 - Android Canvas

java - hibernate 和斯卡拉

java - 为什么我无法在 hibernate 中更改刷新模式

java - 为什么我的 hashmap 只取最后一个条目?

java - 无法从类型 [java.lang.Object[]] 转换为类型