我有许多 OneToMany 关系,在大多数情况下需要急切地加载,如下所示:
@OneToMany(fetch = FetchType.EAGER, mappedBy = "bar")
@Fetch(FetchMode.SELECT)
@BatchSize(size = 10)
但是,在极少数情况下,我需要将 hibernate 标准中的它更改为延迟加载(仍然选择和批处理)。但我不知道该怎么做。 当我尝试 here 中的解决方案时-
criteria.setFetchMode("propertyName", FetchMode.SELECT);
它仍然急切地加载。
我的标准现在看起来像这样:
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Bar.class);
criteria.add(Restrictions.eq("valid", true));
criteria.add(Restrictions.idEq(barId));
Bar result = (Bar) criteria.uniqueResult();
这是实体,仅用于说明目的...
@Entity
@Table(name = "BAR", schema = "UD")
public class Bar {
private List<Foo> foos;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "bar")
@Fetch(FetchMode.SELECT)
@BatchSize(size = 10)
public List<Foo> getFoos() {
return foos;
}
}
我正在使用 Hibernate 5.1.10.Final
最佳答案
我不知道是否可以进行按需获取,但有一种技术可用于此,您可以使用 fetch Bar
在自定义查询中使用构造函数的对象:
@Query("SELECT new BAR( <add other required fields except FOOs> ) from BAR")
注意:这与延迟加载不同。如果您需要Foo
晚于您必须再次进行数据库调用。
关于java - Hibernate 如何在 hibernate 标准中将 eager、select、batch 更改为延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61248017/