1

HQLでnull値を置き換える(または結果をnull値で取得する)にはどうすればよいですか?私の場合、SomeObjectはnullになる可能性があります。Clazz私はとの間で多対一の関係を持っていますSomeObject

SELECT c.name, c.someObject.name from Clazz c

私はもう試した:

SELECT c.name, coalesce(c.someObject.name, ' ') from Clazz c 

ただし、行は返されません。

4

2 に答える 2

2

'many-to-null'関係のようなものはないことに注意してください。参照されるオブジェクト(SomeObject)がエンティティnullを永続化する場合、データベーステーブルにはエントリが作成されません。ClazzSomeObject

SomeObject次に、クエリで(存在しない)にアクセスしようとすると( c.someObject.name)Hibernateは暗黙的に内部結合を構築します。もちろんClazz、結合を実行できないため、問題のオブジェクトは除外されます。

外部結合を明示的に使用してみてください; これはあなたの問題を解決します。

ちなみに、hibernateに生成されたSQLステートメントを出力させることができます。これにより、特定のクエリが特定の方法で動作する理由をよりよく理解できます。

于 2012-12-17T20:14:16.630 に答える
0

c.someObject.nameClazzとSomeObjectの間の暗黙の内部結合です。したがって、これは内部結合であるため、someObjectを持つnullClazzインスタンスを自動的に除外します。

外部結合が必要です:

select c.name, s.name from Clazz c
left join c.someObject s
于 2012-12-17T20:14:25.003 に答える