2009-07-22 3 views
10

私はこのようになりますHibernateのドメインオブジェクトを持っていますその上にエンチャントがあり、isSuperiorEnchantmentフラグが設定されています。私の人生はHQLでこれを表現する方法を理解することはできません。HQLと1対多のクエリが

アイデア?上記のすべての適切なマッピングを想定し

答えて

17

は、あなたが探しているクエリは次のとおりです。

select p 
from Player as p 
    left join p.inventory as i 
    left join i.enchantments as e 
where e.isSuperiorEnchantment = 1 
+0

おかげで、これはとてもうまくいきました。私はそれの前に "選択p"を追加することを忘れてはならなかったが、そうでなければそれは私が必要としたものだった! –

+0

私はちょうどHQLを学んでいますが、通常のSQLではこれはうまくいかないでしょう。左の結合は、インベントリとエンチャントに一致するレコードがなくてもPlayer結果を得ることを意味します。 (私はこれを明確にするために掘り下げていきます...私は疑問を持っています。 "left join"はHQLで何か異なることを意味するか、このクエリはそれほど役に立たないでしょう)。 –

+1

@RobWhelan上記のクエリは、 'isSuperiorEnchantment'がエンチャントなしで返されるため、Enchantmentsなしのプレイヤーでは満足できない' e.isSuperiorEnchantment = 1'条件のため、通常のSQLではうまく機能しますヌル。 – ChssPly76