【问题标题】: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);

【讨论】:

  • 有更好的方法来实现这一点吗?我现在面对它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-01
  • 2011-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多