pureQuery では、プロパティー・レベル・アノテーションは、public プロパティーおよび public get() / set() メソッドでのみ認識されます。 private プロパティーまたは protected プロパティーではこのアノテーションを認識しません。
構文図で使用されている規則については、構文図の読み方を参照してください。
プロパティーのマップ先のデータベース・オブジェクト内の SQL 列を指定します。 このアノテーションは、public プロパティーおよび public メソッドでのみ使用できます。 他の場所で使用するとしても、pureQuery はそれを無視します。>>-@Column--(--name--=--name_of_column--+-------------------------+->< '-table--=--name_of_table-'
次の 2 つの理由のいずれかに該当する場合は、@Column アノテーションを使用できます。
@Column(name="DEPTNO") public String deptNum;
@Column(name="EMPNO") public String getEmpNum() { return empNum; }
例
select a.col1, b.col1 from a, b where a.id=b.id;照会結果を保持している Bean の対応するプロパティーに対する set() メソッドには、2 つの id 列がある表の名前を示した @Column アノテーションが必要です。
public class JoinExample{ private int a_id; private int b_id; @Column (name="id", table="a") public void setA_id (int a_id) { this.a_id = a_id; } public int getA_id () { return a_id; } @Column (name="id", table="b") public void setB_id (int b_id) { this.b_id = b_id; } public int getB_id () { return b_id; } }
@ColumnOverride(propertyName="extension", column="PHONE") public class EmployeeNewCo extends Employee {...
構文図で使用されている規則については、構文図の読み方を参照してください。
>>-@ColumnOverride--(--propertyName--=--"--property--",--column--=--"--name--")-><
>>-@ColumnOverrides--(------------------------------------------> .-,----------------------------------------------------------------------------. V | >--{----@ColumnOverride--(--propertyName--=--"--property--",--column--=--"--name--")-+--}--> >--)-----------------------------------------------------------><
@ColumnOverride アノテーションの配列が、@ColumnOverrides アノテーションの括弧内の、中括弧内にあることに注意してください。
例
CREATE TABLE HRDEPT.EMPLOYEE( EMPNO CHAR(6) NOT NULL, FIRSTNME VARCHAR(12) NOT NULL, MIDINIT CHAR(1), LASTNAME VARCHAR(15), WORKDEPT CHAR(2), PHONENO CHAR(4), HIREDATE DATE, PRIMARY KEY(EMPNO))一部の列名は、短縮されているか、または Java 命名規則に従っていません。
Employee Bean の以下の定義では com.company.Employee クラスのオブジェクトのユーザーにさらに有意な名前を提供するために、@Column アノテーションを使用しています。
public class Employee { private String employeeId; private String firstName; private String middleInitial; private String lastName; private String departmentId; private String extension; private Date hireDate; @Column(name = "EMPNO") public String getEmployeeId () { return employeeId; } public void setEmployeeId (String employeeId) { this.employeeId = employeeId; } @Column(name = "FIRSTNME") public String getFirstName () { return firstName; } public void setFirstName (String firstName) { this.firstName = firstName; } @Column(name = "MIDINIT") public String getMiddleInitial () { return middleInitial; } public void setMiddleInitial (String middleInitial) { this.middleInitial = middleInitial; } public String getLastName () { return lastName; } public void setLastName (String lastName) { this.lastName = lastName; } @Column(name = "WORKDEPT") public String getDepartmentId () { return departmentId; } public void setDepartmentId (String departmentId) { this.departmentId = departmentId; } @Column(name = "PHONENO") public String getExtension () { return extension; } public void setExtension (String extension) { this.extension = extension; } public Date getHireDate () { return hireDate; } public void setHireDate (Date hireDate) { this.hireDate = hireDate; } }
前の例の続きとして、わずかに異なるスキーマを持つデータベースに対してアプリケーションを実行するとします。表は以下のように定義されます。
CREATE TABLE HRDEPTNEWCO.EMPLOYEE( EMPNO CHAR(6) NOT NULL, FIRSTNME VARCHAR(12) NOT NULL, MIDINIT CHAR(1), LASTNAME VARCHAR(15), WORKDEPT CHAR(2), PHONE CHAR(4), HIREDATE DATE, PRIMARY KEY(EMPNO))
前のアノテーションをオーバーライドするために Employee Bean をサブクラス化することができます。これにより新しい表定義で作業できます。 サブクラスの先頭は、以下のようになります。
@ColumnOverride(propertyName="extension", column="PHONE") public class EmployeeNewCo extends Employee {...