9

最近、 PolymorphismType.EXPLICITが特定の要求されたクラスにクエリを制限しない理由についての質問に答えました。答えを調べたところ、なぜそのような注釈があるのか​​、そしてそれが何に役立つのか疑問に思いました。

Hibernateのドキュメントには次のように書かれています。

明示的なポリモーフィズムとは、そのクラスを明示的に指定したクエリによってのみクラス インスタンスが返されることを意味します。クラスに名前を付けるクエリは、マップされたサブクラスのインスタンスのみを返します。

...しかし、スタック オーバーフローで何度か取り上げられているように、言い回しは少しわかりにくいものです。人々はそれを使用してサブクラス テーブル間の結合を回避したいと考えていますが、期待どおりには機能しません。具体的には、A->B クラス階層があり、A が とマークされてEXPLICITいる場合、A に対するクエリは B インスタンスも取得します。これは、「...サブクラスがマップされている」ためです。

この注釈の使用方法は、B をマークすることだと思いますEXPLICIT。次に、A に対するクエリは、実際にタイプ A のオブジェクトだけでなく、共有フィールドのみが入力されたタイプ B のオブジェクトについても、A のインスタンスのみを返します。これにより、アノテーションを軽量パターンに使用できます。

私の質問はこれです: 軽量パターンを有効にすること以外に、このアノテーションの他の良い使用例はありますか? 二次的な質問として、さまざまなInheritanceType値、特に結合されたサブクラスとクラスごとのテーブルとの相互作用に関するドキュメントはありますか?

4

0 に答える 0