본문 바로가기

JPA

2월 3일 JPA 임베디드 클래스 실사용

Member member = new Member();

member.setUsername("hello");

member.setHomeAddress(new Address("city" , "street" , "1000"))

//임베디드 타입으로 값을 세팅시 기본생성자를 사용해 매개변수로 값을 필드 순서대로 넣어준다.

member.setWorkPeriod(new Period());

em.persist(member);

 

우선 member 에서도 임베디드필드에 대한 get ,set을 생성한다.

임베디드에 값을 넣는 방법은 엔티티 클래스에서 임베디드를 new 객체생성해서 넣어준다.

그래서 임베디드는 기본생성자가 필수로 요구된다.

 

임베디드 타입과 테이블 매핑

-임베디드 타입은 엔티티의 "값" 일뿐이다. (주인인 엔티티가 사라지면 같이 사라진다)

-임베디드 타입을 사용하기 전과 후에 매핑하는 테이블은 같다(테이블의 컬럼이 변경되진 않는다)

 

-객체와 테이블을 이후 세밀하게(fine.grained) 매핑하는것이 가능 . 이 기능이 임베디드의 핵심이다.

-잘 설계된 ORM 애플리케이션은 매핑한 테이블의 숫자보다 클래스의 숫자가 더많다. (클래스로 많이 세분화 하였다는 의미)

 

임베디드 타입과 연관관계

{Member (entity)} > {address (value 임베디드)} > {zipcode (value)}

{Member (entity)} > {phoneNumber (value 임베디드)} > {phoneEntity (entity)}

 

-임베디드클래스가 임베디드를 한번더 가질수도 있고 

-임베디드 클래스가 엔티티를 가질수도 있다(fk값만 가지고 있으면 된다,)

 

-임베디드 필드를 @Column으로 DB와 연결도 가능하다.