我有一个带有 @ManyToMany(fetch=FetchType.EAGER) 子集合的父实体。
我只需要加载我找到的父实体的第一条记录,因此我使用以下标准加载它:
session.createCriteria(Parent.class).setMaxResult(1).uniqueResult();
工作正常,但限制也适用于子集合,这是非常糟糕的。
我怎样才能只获得父母的第一个记录,但获得其孩子的所有记录?
Thanks
只需将子项集合标记为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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)