【发布时间】:2011-11-02 21:06:00
【问题描述】:
问题是我的实体中有两个包,我想在我的 jsf 前端显示它们(弹簧在后面,所以没有延迟加载)。所以我必须急切地获取它们以在这样的列表中显示信息:
- 点 1(标签 1,标签 2)(标签 1 ...标签 n)
- 第 2 点(标签 3、标签 4)(标签 1 ... 标签 n)
将两个列表都放入 Eager 不起作用。所以我用 fetch join 试试运气。它允许我获取一个列表,但是当我添加第二个列表时,我得到了已知的“无法获取多个包”错误。
Hibernate 可以在一个查询中处理两个 fetch 连接吗?
public class PointOfInterest
@OneToMany(mappedBy="poi")
private List<PointOfInterestLabel> labels = new ArrayList<PointOfInterestLabel>();
@ManyToMany
private List<Tag> tags = new ArrayList<Tag>();
我的 fetch 加入:
SELECT DISTINCT p from PointOfInterest p
left join fetch p.labels
left join fetch p.tags WHERE p.figure = :figure
在启动时,我的休眠工厂的创建失败:
Caused by: org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags
at org.hibernate.loader.BasicLoader.postInstantiate(BasicLoader.java:94)
at org.hibernate.loader.hql.QueryLoader.<init>(QueryLoader.java:123)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:206)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:98)
at org.hibernate.impl.SessionFactoryImpl.checkNamedQueries(SessionFactoryImpl.java:557)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:422)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1385)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:883)
... 55 more
【问题讨论】:
标签: hibernate join jpa-2.0 fetch