我有一个带有@ManyToMany(fetch = FetchType.EAGER)子集合的父实体。
我只需要加载我发现的父实体的第一条记录,所以我使用这个标准加载它:
session.createCriteria(Parent.class).setMaxResult(1).uniqueResult();
工作正常,但限制也适用于儿童收藏,这非常糟糕。
我怎样才能获得父母的第一条记录,但是它的孩子的所有记录?
由于
答案 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);