3

我有一个实体类

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

}

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

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

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

4

1 回答 1

2

由于您使用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();

如果你想避免 SELECT 或 JOIN在这里检查。

于 2013-02-05T06:45:48.140 回答