pureQuery는 공용 등록 정보와 공용 get() 또는 set() 메소드에 대해서만 등록 정보 레벨 어노테이션을 인식합니다. 개인용 또는 보호 등록 정보에서는 이 어노테이션을 인식하지 않습니다.
구문 다이어그램에서 사용되는 규칙을 이해하려면 구문 다이어그램 읽는 방법을 참조하십시오.
등록 정보가 맵핑하는 데이터베이스 오브젝트의 SQL 컬럼을 지정합니다. 공용 등록 정보 및 공용 메소드에서만 이 어노테이션을 사용할 수 있습니다. 다른 위치에 사용하는 경우 pureQuery는 이를 무시합니다.>>-@Column--(--name--=--name_of_column--+-------------------------+->< '-table--=--name_of_table-'
다음 두 가지 이유 중 하나로 @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() 메소드에는 두 개의 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™ 이름 지정 규칙을 따르지 않습니다.
직원 Bean에 대한 다음 정의는 @Column 어노테이션을 사용하여 com.company.Employee 클래스의 오브젝트 사용자에게 더 의미있는 이름을 제공합니다.
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 {...