====== Entities ====== ORM 서비스를 구성하는 가장 기초적인 클래스로 어플리케이션에서 다루고자 하는 테이블에 대응하여 구성할 수 있으며 테이블이 포함하는 컬럼에 대응한 속성들을 가지고 있다. ===== 기본 필요 요건 ===== Entity를 구성하기 위한 아래와 같은 요건이 있다.(JPA요건) == [필수] Entity annotation 선언 필요 ( 혹은 XML 설정파일에 정의 ) == @Entity public class User { } == [필수] Argument 없는 생성자 필요 == public User(){ } == [필수] 최상위레벨 클래스로 생성되어야 하고 enum,interface로 정의될 수 없음 == == [필수] final 클래스로 선언될 수 없음 == == [필수] Primary Key 있어야 함 : @Id라는 Annotation 표기 == @Id private String userId; == [권장] Serializable 인터페이스 구현 == public class User implements Serializable { private static final long serialVersionUID = -8077677670915867738L; } == [권장] 속성 정보 접근을 위한 getter, setter 정의 == private String userName; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } ===== 주요 Annotations ===== Entity를 구성하는 주요한 Annotation은 다음과 같다. == @Entity == 해당 클래스가 Entity 클래스임을 표시하는 것으로 클래스 선언문 위에 기재한다. 테이블명과 Entity명이 다를 때에는 name에 해당 테이블명을 기재한다 @Entity(name="USER_TB") public class User { } == @Id == 해당 Attribute가 Key임을 표시하는 것으로 Attribute 위에 기재한다. @Id private String userId; == @Column == 해당 Attribute와 매핑되는 컬럼정보를 입력하기 위한 것으로 Attribue위에 기재한다. 컬럼명과 Attribute명이 일치할 경우는 기재하지 않아도 됨 @Column(name = "DEPT_NAME", length = 30) private String deptName; == @OneToOne, @OneToMany, @ManyToOne, @ManyToMany == 테이블간 관계를 구성하기 위한 것으로 정의되는 Attribute위에 기재한다. 각각은 1:1,1:N,N:1,N;N의 관계를 표현함. 이에 대한 자세한 설명은 [[.:association_mapping]] 참고 @ManyToMany private Set roles = new HashSet(0); == @Transient == 테이블의 컬럼과 매핑되지 않고 쓰이는 Attribute를 정의하고자 할때 Attribute위에 기재한다. @Transient private String roleName; ===== Entity Status ===== * **New(transient)** : 단순히 Entity 객체가 초기화되어 있는 상태를 말한다. * **Managed(persistent)** : Entity Manager에 의해 Entity가 관리되는 상태를 말한다. * **Detached** : Entity 객체가 더 이상 Persistance Context와 연관이 없는 상태이다. * **Removed** : Managed 되어 있는 Entity 객체가 삭제된 상태이다.