2014-09-24 93 views
2

我是新來的休眠,所以這個問題可能看起來很愚蠢。使用外鍵查詢數據庫表(其中)使用休眠

我有兩個表:

應用:

@Entity 
@Table 
public class Application extends BaseSimpleEntity { 
    @Column(nullable = false) 
    private String appID; 
    @OneToOne(cascade = CascadeType.ALL) 
    @Searcheable 
    private LocalizedString name; 
... 

編譯:

@Table 
@Entity 
public class Compilation extends BaseSimpleEntity { 

    @Column(nullable = false) 
    private String uid; 
    @ManyToOne 
    private Application application; 
    @Column 
    private DateTime creationDate; 
    @Column 
    private DateTime finishDate; 
    @Column 
    private String path; 
.... 

和我想的編譯噸名單帽子匹配給定的應用程序。

我做了以下查詢:

@Query("FROM Compilation c WHERE c.Application.id = :applicationId") 
List<Compilation> findValidCompialiton(@Param("applicationId") Long applicationId); 

但它無法正常工作。

錯誤:

Caused by: org.hibernate.QueryException: could not resolve property: Application of: xx.xx.xx.xx.xx.Compilation [FROM xx.xx.xx.xx.xx.Compilation c WHERE c.Application.id = :applicationId] at org.hibernate.QueryException.generateQueryException(QueryException.java:137) at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:120) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:234) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158) at org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:126) at org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:88) at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:190) at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301) at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236) at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1800) at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:328)

回答

4

您的查詢應該是:

@Query("FROM Compilation c WHERE c.application.appID = :applicationId") 

您已創建實體的別名c,Hibernate試圖檢查Compilation,現在你可以訪問Compilation實體的屬性。現在屬於Compilation類的屬性爲application,此application屬性代表Application其中有appID

+0

thx爲了解釋說明 – Mercer 2014-09-24 13:55:21