- - PR -
JPQLで複数のfetch join
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-07-29 16:11
こんにちは。
Java Persistence APIについてです。 次のように複数の関連を持ったエンティティがあります。
このエンティティの一覧を一度のSQLで関連するBookも一緒にロードしたい場合、 次のように書くことで実現できることはわかりました。
これをBookだけでなくImageの関連(images)も一緒にロードするように変更する場合、どのようにJPQLを書けばよろしいのでしょうか? JPAはHibernate実装を使用しています。 よろしくお願いします。 | ||||||||||||||||
|
投稿日時: 2007-07-29 21:58
select distinct u from User u left join fetch u.books left join fetch u.images でいいんじゃないですか?試してないんで微妙ですけど。 | ||||||||||||||||
|
投稿日時: 2007-07-29 22:50
項目 u テーブル別名 u とすると後々で解らなくなりますよ。 User 1 : Book n User 1 : Image n という関係性だと思いますが。 select distinct u from ( select distinct u from User left join fetch User.images ) left join fetch User.books が二重結合の方法だったとおもった | ||||||||||||||||
|
投稿日時: 2007-07-29 23:52
こんばんは。
To 杏さん
上記JPQL(Java Persistence Query Language)の"u"は"identification variable(識別変数?)"と呼ばれるもので、SQLのエイリアス(別名)とは異なるものです。 JPQLの中で項目(というよりもプロパティ or フィールド)uを参照する必要がある場合、次のように(識別変数).uのように指定する必要があります。
下記については理解できませんでした。
現在のJPQL(JPA2.0ではできるようになる?)ではfrom句に副問い合わせを利用できないため、これは実行できないと思います。 たぶんSQLと混乱されているような? To あしゅさん ご指摘のクエリーで実行できました。 質問する前に試したのですが、その時は検索条件の指定ミスで動かなかったようです(汗。 お二方、返信ありがとうございました。 | ||||||||||||||||
|
投稿日時: 2007-07-30 07:41
[quote]
mikanさんの書き込み (2007-07-29 23:52) より: こんばんは。 To 杏さん
上記JPQL(Java Persistence Query Language)の"u"は"identification variable(識別変数?)"と呼ばれるもので、SQLのエイリアス(別名)とは異なるものです。 JPQLの中で項目(というよりもプロパティ or フィールド)uを参照する必要がある場合、次のように(識別変数).uのように指定する必要があります。
下記については理解できませんでした。
テーブル名と項目名を同じにするといまいちDB系が解ってない別の人が見たときに バグの温床になる恐れがあるということですよ。 短く、画面で見える程度のものしかない場合なら同じでもいいのですけどね。 あと DBに投げるときにSQL変換しているのでSQLも直接可能ということで出したまで。 |
1