【发布时间】:2009-02-26 22:57:04
【问题描述】:
我有以下实体结构:业务 --> 活动 --> 促销,其中一个企业可以有很多活动,一个活动可以有很多促销。两个一对多关系都被声明为 LAZY。在我的代码中的一个地方,我需要急切地从业务中获取这两个集合,所以我这样做了:
Query query = entityManager.createQuery("select b from Business b " +
"left join fetch b.campaigns c " +
"left join fetch c.promotions where b.id=:id");
query.setParameter("id", b.getId());
business = (Business) query.getResultList().get(0);
但是,查询返回一个结果列表,其中包含 4 个业务对象,所有 4 个对象都引用同一个业务实例。在我的数据库中,该商家有 3 个广告系列,并且所有 3 个广告系列都有 3 个促销活动。
我有两个问题:
一开始,我使用List来包含多个方面的关系,但是当程序运行时,我得到“org.hibernate.HibernateException:不能同时获取多个包”异常。然后我用谷歌搜索了这个异常,看起来我必须使用 Set,而不是 List。所以我将集合更改为 Set 并且它起作用了。谁能告诉我为什么 List 在这种情况下不起作用?
我希望查询返回一个结果,因为它查询的是主键 id,因此应该只返回一个结果。但事实证明,它在 List 中返回 4 个实例。这是一个问题吗?或者这是预期的行为?
任何帮助将不胜感激。
【问题讨论】: