これらのクラスによって、サンプル SQL 照会からデータを返す Bean を定義します。 その照会はインライン SQL 照会として、またこの例のインターフェース・クラスの中で、使用します。
JUnit テスト・メソッドは pureQuery メソッドを呼び出して、それらの Bean をインスタンス化し、データを設定します。 このテスト・メソッドは、それらの Bean の内容のリストを生成します。
Dept1 クラスは、pureQuery のネストされた Bean のセットの最上位 Bean です。 Dept1 クラスでは、ORGANIZATION 表の部門 ID と部門名のための get メソッドと set メソッドを定義します。 さらに、この Bean で Emp Bean の get メソッドと set メソッドも定義します。
最上位 Bean では少なくとも 1 つの @Id アノテーションが必要です。 @JoinPoint アノテーションは、子 Bean である Emp Bean のリストを参照します。 @JoinColumn アノテーションは、Emp 子 Bean を Dept1 親 Bean にリンクする ID 列として EMPLOYEE_CODE 列を指定しています。 Dept1 Bean が親 Bean になっている場合、@JoinColumn が指定されているので、Emp Bean の @Id アノテーションは無視されます。
package mytest;
import java.util.List;
import com.ibm.pdq.annotation.Column;
import com.ibm.pdq.annotation.Id;
import com.ibm.pdq.annotation.JoinColumn;
import com.ibm.pdq.annotation.JoinPoint;
import com.ibm.pdq.annotation.Table;
@Table(name = "ORGANIZATION")
public class Dept1 {
private String deptCode;
private String deptNameEn;
private List<Emp> deptEmployees;
@Id
@Column(name = "ORGANIZATION_CODE")
public String getDeptCode() {
return deptCode;
}
public void setDeptCode(String orgCode) {
this.deptCode = orgCode;
}
@Column(name = "ORGANIZATION_NAME_EN")
public String getDeptNameEn() {
return deptNameEn;
}
public void setDeptNameEn(String orgNameEn) {
this.deptNameEn = orgNameEn;
}
@JoinPoint(@JoinColumn(name = "EMPLOYEE_CODE", table = "EMPLOYEE", propertyName = "employeeId"))
public List<Emp> getDeptEmployees() {
return deptEmployees;
}
public void setDeptEmployees(List<Emp> deptEmployees) {
this.deptEmployees = deptEmployees;
}
}
Dept2 クラスは、インライン SQL のテストで使用します。 このクラスでは、public フィールドを定義して Bean プロパティーを定義します。
package mytest;
import java.util.List;
import com.ibm.pdq.annotation.Column;
import com.ibm.pdq.annotation.Id;
import com.ibm.pdq.annotation.JoinColumn;
import com.ibm.pdq.annotation.JoinPoint;
import com.ibm.pdq.annotation.Table;
@Table(name = "ORGANIZATION")
public class Dept2 {
@Id
@Column(name = "ORGANIZATION_CODE")
public String deptCode;
@Column(name = "ORGANIZATION_NAME_EN")
public String deptNameEn;
@JoinPoint
public List<Emp> deptEmployees;
}
Emp クラスには、EMPLOYEE 表と EMPOYEE_HISTORY 表からの情報が入ります。 このクラスの @Table アノテーションでは、EMPLOYEE 表を指定します。 getWorkDept( ) メソッドの @Column アノテーションでは、EMPOYEE_HISTORY 表を指定します。
このクラスには、それらの表の従業員情報用の get メソッドと set メソッドがあります。 @Id アノテーションは EMPLOYEE_CODE 列を指定しており、この列が Dept2 クラスの @JoinPoint アノテーションの ID 列であることを示します。 Dept1 クラスでは、@JoinColumn プロパティーの値で ID 列を定義します。
package mytest;
import com.ibm.pdq.annotation.Column;
import com.ibm.pdq.annotation.Id;
import com.ibm.pdq.annotation.Table;
@Table(name = "EMPLOYEE")
public class Emp {
private Integer employeeId;
private String firstName;
private String lastName;
private String workDept;
private java.sql.Date hireDate;
@Id
@Column(name = "EMPLOYEE_CODE")
public Integer getEmployeeId() {
return employeeId;
}
public void setEmployeeId(Integer empCode) {
this.employeeId = empCode;
}
public String toString() {
return " ID: " + employeeId;
}
@Column(name = "FIRST_NAME")
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
@Column(name = "LAST_NAME")
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@Column(name = "ORGANIZATIION_CODE", table = "EMPLOYEE_HISTORY")
public String getWorkDept() {
return workDept;
}
public void setWorkDept(String workDept) {
this.workDept = workDept;
}
@Column(name = "DATE_HIRED")
public java.sql.Date getHireDate() {
return hireDate;
}
public void setHireDate(java.sql.Date hireDate) {
this.hireDate = hireDate;
}
}