====== Association Mapping ======
두 클래스 사이의 Association 유형별 매핑 방법에 대해서 살펴보고자 한다. 그리고 다양한 Collection의 매핑 방법 및 Collection의 주요속성인 inverse,cascade에 대해서 샘플코드를 중심으로 살펴본다.
===== One To One Mapping =====
테이블간 1:1 매핑이 있을 경우에 각각의 Entity 클래스를 정의하고 클래스간 관계를 OneToOne 매핑으로 처리한다.
== Sample Source ===
@Entity
public class Employee {
@OneToOne
private TravelProfile profile;
}
@Entity
public class TravelProfile {
@OneToOne
private Employee employee;
}
위의 예를 보면 Employee 와 TravelProfile가 각각 OneToOne이라는 Annotation을 기재하여 매핑처리한 것을 알수 있다.
===== One To Many Mapping =====
테이블간 1:N 매핑이 있을 경우에 각각의 Entity 클래스를 정의하고 한쪽에는 OneToMany, 다른쪽에는 ManyToOne 이라는 Annotation을 기재하여 관계를 나타낸다.
== Sample Source ===
@Entity
public class Department{
@OneToMany(targetEntity=User.class)
private Set users = new HashSet(0);
}
@Entity
public class User{
@ManyToOne
private Department department;
}
위의 예를 보면 Department:User = 1:N 의 관계가 있으며 그 관계에 대해서 Department 클래스에서 OneToMany로 표시하고 User 클래스에서 ManyToOne으로 표시하여 관계를 나타냈다.
==== Collection Type ====
Collection은 위의 예에서 사용된 Set 이외에도 List,Map를 사용할 수 있는데 각각의 사용법은 다음과 같다
=== Set ===
java.util.Set 타입으로 을 이용하여 정의한다. 객체의 저장 순서를 알 수 없으며, 동일 객체의 중복 저장을 허용하지 않는다. (HashSet 이용) 다음은 set 태그를 이용하여 Collection 객체를 정의한 소스 코드의 예이다
== Sample Source ===
@Entity
public class Department{
@OneToMany(targetEntity=User.class)
private Set users = new HashSet(0);
}
=== List ===
java.util.List 타입으로 를 이용하여 정의한다. List 타입의 경우 저장된 객체의 순서를 알 수 있으며, 저장 순서를 테이블에 보관하기 위해서 별도 인덱스 컬럼 정의가 필요하다. (ArrayList 이용) 다음은 list 태그를 이용하여 Collection 객체를 정의한 소스 코드의 예이다
== Sample Source ===
@Entity
public class Department{
@OneToMany(targetEntity=User.class )
private List users = new ArrayList(0);
}
=== Map ===
java.util.map 타입으로