2011-11-12 63 views
1

對於那些休眠查詢的另一個問題,我非常抱歉打擾了Stack Overflow,但已經過了四個小時左右,我試圖解決這個問題,目前爲止還沒有成功。與休眠查詢結合使用三張表

問題如下。我有一個處理「行情」,「來源」和「職位」的模型。報價是來自書籍,劇本,論文等的引用 - 這種多樣性是「資源」對象的含義。引用來源中的確切位置就是頭寸。因此,例如,「blablablabla」(引用)位於「程序藝術」第5章第12頁(位置)(來源)。

現在,我想讓每個「職位」已經註冊爲「來源」。但是這兩者之間沒有直接映射,我想避免建立這種聯繫(儘管我開始相信沒有其他解決方案)。另一方面,Quote對象有一個Source和一個Position。

這是從報價類的摘錄:

public class Quote 
{ 

    @ManyToOne(cascade=CascadeType.ALL) 
    Position position; 

    @ManyToOne(cascade=CascadeType.ALL) 
    Source source; 

     // ... other stuff 

} 

起初,我只是得到了一些例外「的加入沒有路徑」,所以我讀了所有我能找到的堆棧溢出。如果我理解正確的話,我的查詢應該是這個樣子:

currentSession.createQuery("from Position 
inner join Quote quote, Source source where quote.source = :idSource"); 

但即使這樣我得到這個異常:

Unable to resolve path [quote.source], unexpected token [quote] 

有我犯了一個錯誤的地方或者我要求太多了休眠的?預先感謝您的幫助。

回答

1

你要找的查詢是:

select q.position 
    from Quote q 
where q.source = :source 

請注意,您應該通過實際Source實體這裏參數;如果你只想通過它的ID,最後一行應該改爲where q.source.id = :idSource(假設你的標識符屬性是id)。

+0

好的,這比我想象的要簡單得多!非常感謝你。我不知道你可以使用這個實體本身,那很好。再次感謝你。 – Raveline