16.2. 名前付き SQL クエリ
名前付き SQL クエリはマッピングドキュメントで定義することができ、名前付き HQL クエリと全く同じ方法で呼ぶことができます。この場合、
addEntity() を呼び出す必要は ありません。
List people = sess.getNamedQuery("persons")
.setString("namePattern", namePattern)
.setMaxResults(50)
.list();
List people = sess.getNamedQuery("persons")
.setString("namePattern", namePattern)
.setMaxResults(50)
.list();
<return-join> 要素を使って関連を結合し、<load-collection> 要素を使ってコレクションを初期化するクエリを定義します。
名前付き SQL クエリはスカラ値を返すこともできます。
<return-scalar> 要素を使って、列の別名と Hibernate の型を宣言しなければなりません:
リザルトセットのマッピング情報を
<resultset> 要素に外部化することができます。複数の名前付きクエリか setResultSetMapping() API で再利用できます。
代わりに、hbm ファイル内のリザルトセットのマッピング情報を直接 Java コードで使用できます。
List cats = sess.createSQLQuery(
"select {cat.*}, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id"
)
.setResultSetMapping("catAndKitten")
.list();
List cats = sess.createSQLQuery(
"select {cat.*}, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id"
)
.setResultSetMapping("catAndKitten")
.list();
16.2.1. 列と列の別名を明示的に指定するために return-property を使う リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Hibernate が別名を挿入できるようにするには、
{} 構文を使う代わりに、<return-property> を使い、どの列の別名を使うのかを Hibernate に対して明示できます。
<return-property> は複数の列も扱えます。これは、複数列のプロパティをきめ細かく制御できないという、{} 構文の制限を解決します。
この例では、挿入のための
{} 構文と組み合わせて、 <return-property> を使いました。こうすることで、ユーザーは列とプロパティをどのように参照するかを選べます。
マッピングに discriminator が含まれている場合、 discriminator の列を指定するために、
<return-discriminator> を使わなければなりません。