背景
通常は、エンティティのすべてを取得していたが、大量データを扱う際には特定カラム取得となり、SQLとは違った記載方法だった為、メモとして纏める。
全カラムを取得する場合
<named-query name="findPersonsAddressInfo">
<query>
SELECT
p, a
FROM
Person p
INNER JOIN
Address a
ON
p.addressId = a.addressId
</query>
</named-query>
特定カラムを取得する場合
新規エンティティを作成する方法
新規エンティティを作成し、JPQLは今まで通りの記述をする。
既存エンティティにコンストラクタを追加する方法
※エンティティにマッピングする為のコンストラクタを追加し、JPQLにはカラムを指定しNEWを使用してマッピングする。
public class Person {
//デフォルトコンストラクタ
public Person(){
}
//特定カラム取得
public Person(String name, int age){
super();
this.name = name;
this.age = age;
}
}
<named-query name="findPersonsAddressInfo">
<query>SELECT NEW パス.Person(
p.name, p.age), a
FROM
Person p
INNER JOIN
Address a
ON
p.addressId = a.addressId
</query>
</named-query>