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

时间:2013-02-05 06:21:55

标签: java hibernate entity criteria

我有一个实体类

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

}

在某些情况下,我不想加载对象A,因为我已经拥有该对象。 和C一样。但这些是我不想加载这些对象的特定场景。

有什么方法可以告诉hibernate不要加载实体对象的某些属性。 {没有Eager / Fetch建议。我只想在特定情况下发生这种情况]

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

1 个答案:

答案 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