我有一个实体类
class B{
@ManyToOne(fetch = FetchType.EAGER)
private A a;
@ManyToOne(fetch = FetchType.LAZY)
private C c;
}
在某些情况下,我不想加载对象A,因为我已经拥有该对象。 和C一样。但这些是我不想加载这些对象的特定场景。
有什么方法可以告诉hibernate不要加载实体对象的某些属性。 {没有Eager / Fetch建议。我只想在特定情况下发生这种情况]
注意:我现在正在使用Criteria来获取对象。
答案 0 :(得分:2)
由于您使用HQL
查询,因此您可以使用“fetch”关键字根据条件指定fetching strategy at runtime,如下所示:
List result = sess.createCriteria(B.class)
.add( Restrictions.like("name", "yourcondition%") )
.setFetchMode("a", FetchMode.EAGER)
.setFetchMode("c", FetchMode.LAZY)
.list();
<强> 编辑: 强>
由于不推荐使用FetchMode.EAGER和FetchMode.LAZY,因此使用FetchMode.SELECT或FetchMode.JOIN
List result = sess.createCriteria(B.class)
.add( Restrictions.like("name", "yourcondition%") )
.setFetchMode("a", FetchMode.JOIN)
.setFetchMode("c", FetchMode.SELECT)
.list();
如果您想避免SELECT或JOIN检查here。