一尘不染

排除在Hibernate对象中加载特定属性

hibernate

我有一个实体课

class B{
    @ManyToOne(fetch = FetchType.EAGER)
    private A a;
    @ManyToOne(fetch = FetchType.LAZY)
    private C c;

}

在某些情况下,我不想加载对象A,因为我已经有了该对象。对于C也是如此。但是这些是特定的场景,我根本不想加载那些对象。

有什么方法可以告诉Hibernate不要加载实体对象的某些属性。{没有渴望/获取建议。我只希望仅在特定情况下才发生这种情况]

注意:我现在使用Criteria来获取对象。


阅读 236

收藏
2020-06-20

共1个答案

一尘不染

由于HQL用于查询,因此可以在运行时根据条件使用“
fetch”关键字指定获取策略,如下所示:

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();
2020-06-20