2011-11-12 14 views
1

スタックオーバーフローを懸念して残念ながら、これらの休止状態のクエリに関するもう1つの質問はありますが、これまで4時間ほどでこの問題を解決しようとしました。休止状態のクエリで3つのテーブルに結合する

問題は次のとおりです。私は "Quotes"、 "Sources"、 "Positions"を扱うモデルを持っています。見積もりは、本、演劇、論文などの引用です。この多様性は、「出典」のオブジェクトです。そして、見積もりがソースにある正確な場所は、位置です。たとえば、 "blablablabla"(引用)は "プログラミングの芸術"(出典)の "第5章12ページ"(位置)にあります。

ここで、「ソース」に既に登録されているすべての「ポジション」を取得したいと考えています。しかし、これら2つの間には直接のマッピングはありません。この接続を避けたいのですが(私は他の解決策はないと考え始めています)。一方、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

あなたが探しているクエリは次のとおりです。あなたがここにパラメータとして実際のSourceエンティティを渡すべきである

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

注意。そのIDを渡すだけなら、最後の行はwhere q.source.id = :idSource(IDプロパティがidであると仮定します)と読み替えるべきです。

+0

すべての権利は、私が思ったよりはるかに簡単でした!どうもありがとうございました。エンティティ自体を使うことができるかどうかは分かりませんでした。ありがとうございました。 – Raveline