pureQuery のネストされた Bean を定義するクラス

pureQuery のネストされた Bean を定義する Java クラスを作成します。 これらのクラスのプロパティーのアノテーションによって、ネストされた Bean の階層を定義します。
この例で pureQuery のネストされた Bean を定義するクラスは、以下のとおりです。
  • Dept1 クラスは最上位の Bean を定義します。 Bean プロパティーは get メソッドと set メソッドで定義します。
  • Dept2 クラスは最上位の Bean を定義します。 Bean プロパティーは public フィールドで定義します。
  • Emp クラスは、インターフェースとインライン SQL ステートメントで使用する子 Bean を定義します。
この例では、Dept1 Bean をインターフェースで使用し、Dept2 Bean をインライン SQL ステートメントで使用します。

これらのクラスによって、サンプル SQL 照会からデータを返す Bean を定義します。 その照会はインライン SQL 照会として、またこの例のインターフェース・クラスの中で、使用します。

JUnit テスト・メソッドは pureQuery メソッドを呼び出して、それらの Bean をインスタンス化し、データを設定します。 このテスト・メソッドは、それらの Bean の内容のリストを生成します。

この例のインターフェースで参照する Dept1 クラス

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;
    }

}

インライン SQL 照会で参照する Dept2 クラス

Dept2 クラスは、インライン SQL のテストで使用します。 このクラスでは、public フィールドを定義して Bean プロパティーを定義します。

最上位 Bean では少なくとも 1 つの @Id アノテーションが必要です。 @JoinPoint アノテーションは、子 Bean である Emp Bean のリストを参照します。 @JoinPoint アノテーションには、ID 列を指定する @JoinColumn アノテーションは含まれません。 @JoinColumn アノテーションを指定しない場合は、@Id アノテーションが付いている子 Bean のプロパティーが使用されます。 この例の Emp クラスでは、EMPLOYEE 表の EMPLOYEE_CODE 列に対応するプロパティーに @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 Dept2 {

    @Id
    @Column(name = "ORGANIZATION_CODE")
    public String deptCode;

    @Column(name = "ORGANIZATION_NAME_EN")
    public String deptNameEn;

    @JoinPoint
    public List<Emp> deptEmployees;

}

この例で参照する Emp クラス

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;
    }
}

フィードバック