【问题标题】:Hibernate setMaxResult on parent limit child collection too父限制子集合上的休眠 setMaxResult 太
【发布时间】:2011-12-08 12:25:42
【问题描述】:
我有一个带有 @ManyToMany(fetch=FetchType.EAGER) 子集合的父实体。
我只需要加载我找到的父实体的第一条记录,因此我使用以下条件加载它:
session.createCriteria(Parent.class).setMaxResult(1).uniqueResult();
工作正常,但限制也适用于子集合,这很糟糕。
我怎样才能只获得父母的第一条记录,而获得其孩子的所有记录?
谢谢
【问题讨论】:
标签:
hibernate
hibernate-criteria
【解决方案1】:
只需将孩子的集合标记为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);