2011-11-19 114 views
2

这是怎么了我的域名看起来:JPA获取连接查询

public class Template implements Serializable { 
    private static final long serialVersionUID = 1L;  
    @OneToOne(cascade=CascadeType.ALL) 
    private FieldConfig fieldConfig; 
} 

public class FieldConfig implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @OneToMany(cascade= CascadeType.PERSIST) 
    @JoinColumn(name = "fieldConfigId") 
    private Set<Field> fieldSet; 
} 

我要实现的,如果我加载从自动fieldConfig加载数据库和fieldconfig的字段集的模板。

我目前的JPQL:

TypedQuery<Template> query = em.createQuery("SELECT t from Template t LEFT JOIN FETCH t.fieldConfig" 
       + " fconfig LEFT JOIN FETCH fconfig.fieldSet where t.id = :id", Template.class); 

我的例外:

Internal Exception: NoViableAltException([email protected][()* loopback of 477:9: (node= join)*]) 
Exception Description: Syntax error parsing the query [SELECT t from Template t LEFT JOIN FETCH t.fieldConfig fconfig LEFT JOIN FETCH fconfig.fieldSet where t.id = :id], line 1, column 55: unexpected token [fconfig]. 

创造这样的查询有什么想法?

+0

是'@ Template'和'@ FieldConfig'标注为实体或描述符中的配置呢? –

+0

是当然,我没有包括可读性:) –

+0

该查询看起来对我来说是正确的。你的JPA引擎是什么?你有没有尝试使用AS fconfig来查看它是否有所作为? –

回答

3

您不能在JPQL的联合提取中使用别名,这是规范所不允许的。

的EclipseLink不容许嵌套连接通过查询提示取,

"eclipselink.join-fetch"="t.fieldConfig.fieldSet" 
+0

TypedQuery