ORM(Object Relational Mapping)
- Entity와 데이터베이스 테이블(들)간을 mapping 하는 방법
- Annotation 또는 XML을 이용
나는 이번에 Annotation 방법만 알아볼 것이다.
<기본적인 ORM Annotation>
@Entity
객체라고 지정
기본 생성자 필수(인자있는 생성자 있을때.. 없으면 자동생성)
final 정의 X
@Table(name="EXAMPLE")
대응되는 테이블 지정, 테이블과 Entity의 이름이 같으면 생략 가능함
@Id
식별자 필드 지정, 테이블의 PK(Primary Key)컬럼과 대응됨
Field 또는 Property(getter)에 적용 가능
float, double 등 정밀도의 제한이 있는 타입은 피해야 함
@Column(name="example")
테이블 내 대응되는 컬럼명 지정
@Transient
DB에 저장되지 않는 비영속적 필드
<복합 식별자 ORM Annotation>
1. @Embeddable, @Embeddedld 사용
- 복합 식별자 클래스 정의 -> 클래스에 @Embeddable annotation 붙이기
- Entity 클래스에서 복합식별자 클래스 필드 생성 -> 해당 필드에 @Embeddedld 붙이기
ex)
@Embeddable
public class AbcDefPK implements Serializble{ //Serializable 인터페이스 구현
private int abc;
private int def;
public AbcDefPK(){ }; // 기본생성자
@Override
public boolean equals(Object obj){ .. 생략 }
@Override
public int hashCode() { .. 생략}
}
@Entity
public class AbcDef implemets Serializable{
@EmgeddedId
private AbcDefPK id;
..
}
2. @IdClass, @Id 사용
- 복합 식별자 클래스 정의 -> 특별히 붙이는 annotationd 없음
- Entity 클래스에서 복합식별자 클래스 선언, 그리고 각 필드에 @Id붙이기
ex)
public class AbcDefPK implements Serializble{ //Serializable 인터페이스 구현
private int abc;
private int def;
public AbcDefPK(){ }; // 기본생성자
@Override
public boolean equals(Object obj){ .. 생략 }
@Override
public int hashCode() { .. 생략}
}
@Entity
@IdClass(AbcDefPK.class)
public class AbcDef implemets Serializable{
@Id private int abc;
@Id private int def;
..
}
<한 테이블 사용&Entity안에 객체 필드 선언할때 ORM>
@Embeddable
- 다른 객체에 포함되는 값 객체(value object)를 정의
- 독립적인 entity가 아니므로 식별자(PK)를 가질 필요 없음
@Embedded
- Entity 안 에서 값 객체 앞에 선언

<하나의 Entity를 두 테이블에 나눠 저장하는 ORM>
@SecondaryTable
- Entity 1개에 두 개의 테이블을 mapping할때 사용
- join같은 역할을 함
<기타>
@Enumerated
@Temporal
@GerneratedValue
'Spring' 카테고리의 다른 글
| JPA(1), EntityManager (0) | 2024.06.01 |
|---|---|
| [Spring] XML기반의 Bean 설정(Configuration) (0) | 2024.03.21 |
| [Spring]#12 이전 실습 정리&마무리 (0) | 2024.02.22 |
| [Spring]#11 객체 지향 원리와 적용 (1) | 2024.02.18 |
| [Spring]#10 순수 Java 개발 실습 (0) | 2024.02.03 |