Hibernate也在父级限制子集合上设置了setMaxResult

时间:2011-12-08 12:25:42

标签: hibernate hibernate-criteria

我有一个带有@ManyToMany(fetch = FetchType.EAGER)子集合的父实体。

我只需要加载我发现的父实体的第一条记录,所以我使用这个标准加载它:

session.createCriteria(Parent.class).setMaxResult(1).uniqueResult();

工作正常,但限制也适用于儿童收藏,这非常糟糕。

我怎样才能获得父母的第一条记录,但是它的孩子的所有记录?

由于

1 个答案:

答案 0 :(得分:3)

只需将子集合标记为fetch = FetchType.LAZY,不要在查询中获取它并在必要时在查询后初始化集合:

Parent p = (Parent) session.createCriteria(Parent.class).setMaxResult(1).uniqueResult();
// if necessary:
Hibernate.initialize(p.getChildren());

如果你真的想把关联保持为渴望获取(这是一个坏主意,IMO),那么只加载查询中父项的ID,然后获取父项:

Long parentId = (Long) session.createCriteria(Parent.class)
                              .setProjection(Projections.id())
                              .setMaxResult(1)
                              .uniqueResult();
Parent p = session.get(Parent.class, parentId);