Die Klassen definieren Beans, die Daten aus der SQL-Beispielabfrage zurückgeben. Die Abfrage wird als Inline-SQL-Abfrage und in der Beispielschnittstellenklasse verwendet.
JUnit-Testmethoden rufen pureQuery-Methoden auf, um die Beans zu instanziieren und zu füllen. Die Testmethode listet den Inhalt der Beans auf.
Die Klasse Dept1 ist die Bean der höchsten Ebene in der Gruppe verschachtelter pureQuery-Beans. Die Klasse Dept1 definiert die get- und set-Methoden für die Abteilungs-ID und die Abteilungsbezeichnung aus der Tabelle ORGANIZATION. Die Bean definiert auch eine get- und set-Methode für Emp-Beans.
Für eine Bean der höchsten Ebene ist mindestens eine Annotation @Id erforderlich. Die Annotation @JoinPoint verweist auf die Liste der Emp-Beans als untergeordnete Beans. Die Annotation @JoinColumn gibt die Spalte EMPLOYEE_CODE als Identitätsspalte an, die die untergeordneten Emp-Beans mit der übergeordneten Bean Dept1 verknüpft. Wenn die Bean Dept1 die übergeordnete Bean ist, werden Annotationen @Id in der Bean Emp ignoriert, weil @JoinColumn angegeben ist.
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; } }
Die Klasse Dept2 wird mit dem Test für Inline-SQL verwendet. Die Klasse definiert öffentliche Felder, um die Bean-Eigenschaften zu definieren.
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; }
Die Klasse Emp enthält die Informationen aus den Tabellen EMPLOYEE und EMPOYEE_HISTORY. Die Annotation @Table für die Klasse gibt die Tabelle EMPLOYEE an. Die Annotation @Column für die Methode getWorkDept( ) gibt die Tabelle EMPOYEE_HISTORY an.
Die Klasse enthält get- und set-Methoden für Mitarbeiterinformationen aus den Tabellen. Die Annotation @Id gibt die Spalte EMPLOYEE_CODE an, die die Spalte als Identitätsspalte für die Annotation @JoinPoint in der Klasse Dept2 angibt. Für die Klasse Dept1 wird die Identitätsspalte über die Eigenschaftswerte @JoinColumn definiert.
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; } }