カスタムエンティティを作る
@Entity
public class customEntity {
@Cplumn(name = "id")
private int id;
}
結合した結果が複数テーブルのカラムを含む場合、取得対象カラムすべてに対応するプロパティをもったエンティティクラスが必要です。
使用するDaoのメソッド定義は次のとおりです。
@Select
List<EmployeeDepartment> selectAllEmployeeDepartment();
戻り値のListの要素であるEmployeeDepartmentが結合した結果に対応するエンティティクラスです。 このエンティティクラスは、結合のベースとなるテーブルに対応するエンティティクラスを継承すると比較的に簡単に作成できます。
複数のテーブルを結合した結果に対応するエンティティを作ろうとしているが、
テーブルAとテーブルBに同一のカラム名がある場合はどうすれば良いのだろう。。
下記の場合、nameがテーブルAとテーブルBにもある。それぞれデータを独自に持っている。
@Entity
public class ContractorWithParents extends Contractor {
@Column(name = "app_id")
String appId;
@Column(name = "name")
String name;
@Column(name = "name")
String departmentName;
...
}
ここに答えが載っていた。
このクラスは、Employeeクラスを継承し、DEPARTMENTテーブルのNAMEカラムに対応するプロパティを持ちます。 @Columnのname要素に指定されている「DEPARTMENT_NAME」はSQL上でDEPARTMENTテーブルのNAMEカラムの別名になります。
@Entity
public class EmployeeDepartment extends Employee {
@Column(name = "DEPARTMENT_NAME")
String departmentName;
...
}
Daoメソッドに対応するSQLファイルのパスはMETA-INF/tutorial/dao/EmployeeDao/selectAllEmployeeDepartment.sqlです。 SQLは次のように記述されています。
select
e.*,
d.name department_name
from
employee e
left outer join
department d
on
e.department_id = d.id
order by
e.id
Daoのメソッドは次のように呼び出します。
List<EmployeeDepartment> list = dao.selectAllEmployeeDepartment();