Red Hat Training
A Red Hat training course is available for Red Hat JBoss Web Server
17.4. ロードのためのカスタム SQL
エンティティを読み込むための独自の SQL (もしくは HQL)クエリも宣言できます:
<sql-query name="person"> <return alias="pers" class="Person" lock-mode="upgrade"/> SELECT NAME AS {pers.name}, ID AS {pers.id} FROM PERSON WHERE ID=? FOR UPDATE </sql-query>
これは、まさに前述した名前付きクエリの宣言です。この名前付きクエリをクラスのマッピングから参照できます:
<class name="Person"> <id name="id"> <generator class="increment"/> </id> <property name="name" not-null="true"/> <loader query-ref="person"/> </class>
これはストアドプロシージャでさえも動作します。
コレクションをロードするためのクエリさえ定義することもできます。
<set name="employments" inverse="true"> <key/> <one-to-many class="Employment"/> <loader query-ref="employments"/> </set>
<sql-query name="employments"> <load-collection alias="emp" role="Person.employments"/> SELECT {emp.*} FROM EMPLOYMENT emp WHERE EMPLOYER = :id ORDER BY STARTDATE ASC, EMPLOYEE ASC </sql-query>
結合フェッチによりコレクションをロードするエンティティローダーも定義できます:
<sql-query name="person"> <return alias="pers" class="Person"/> <return-join alias="emp" property="pers.employments"/> SELECT NAME AS {pers.*}, {emp.*} FROM PERSON pers LEFT OUTER JOIN EMPLOYMENT emp ON pers.ID = emp.PERSON_ID WHERE ID=? </sql-query>