我有一个实体课
class B{ @ManyToOne(fetch = FetchType.EAGER) private A a; @ManyToOne(fetch = FetchType.LAZY) private C c;
}
在某些情况下,我不想加载对象A,因为我已经有了该对象。对于C也是如此。但是这些是特定的场景,我根本不想加载那些对象。
有什么方法可以告诉Hibernate不要加载实体对象的某些属性。{没有渴望/获取建议。我只希望仅在特定情况下才发生这种情况]
注意:我现在使用Criteria来获取对象。
由于HQL用于查询,因此可以在运行时根据条件使用“ fetch”关键字指定获取策略,如下所示:
HQL
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();