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 {...