2011-11-19 141 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