2011-09-25 80 views
0

使用Hibernate 3.6.7和JPA 2,我不能在一个查询中有两个提取连接。实体有一个名为parent的自引用字段。 localizedTexts是Java类型的Map的@ElementCollection。 entity.getParent()有一个带有EAGER加载策略的@ManyToOne。多个JQPL提取连接失败,休眠

这里是实体的样子:

@Entity 
public class Entity extends BaseEntity { 
    /* ... */ 

    @ManyToOne(fetch = FetchType.EAGER) 
    public Entity getParent() { 
     return parent; 
    } 

    @ElementCollection 
    @MapKeyColumn(name = "language") 
    @Column(name = "text") 
    public Map<String, String> getLocalizedTexts() { 
     return localizedTexts; 
    } 

    /* ... */ 
} 

以下两个查询工作:

select e from Entity e join fetch e.parent.localizedTexts 

select e from Entity e join fetch e.localizedTexts 

但是,这并不工作:

select e from Entity e join fetch e.localizedTexts join fetch e.parent.localizedTexts 

Hibernate的抱怨: query specified join fetching, but the owner of the fetched association was not present in the select list [FromElement{explicit,collection join,fetch join,fetch non-lazy properties,classAlias=null,role=net.company.project.Entity.localizedTexts,tableName={none},tableAlias=localizedt3_,origin=null,columns={,className=null}}] [select e from net.company.project.Entity e join fetch e.localizedTexts join fetch e.parent.localizedTexts]

回答

0

如果你想预装实体“父”协会以及家长的“localizedTexts”协会应该声明加入穿越以正确的顺序模型树:

select e from Entity e join fetch e.parent p joint fetch p.localizedTexts 
+0

没有区别。这个查询也会引发同样的异常:select e from Entity e join e.parent p join fetch e.localizedTexts join fetch p.localizedTexts – Mohsen

+0

如果你有一个从e到父对象的OneToMany或oneTOOne关联,从父对象到onTextOne,上面的加入应该工作。如前所述,请发布前面提到的这些bean以及它们之间的关联 –

+0

的代码,其中localizedTexts是MapKeyColumn,并且getParent()上有一个ManyToOne – Mohsen