JKROH 2023. 2. 27. 15:12
반응형
해당 강의는 코드 위주로 진행됩니다. 실질적인 객체 처리를 담당하는 코드는 링크에서 확인하시길 바랍니다.

* 테이블과 매핑 예

  • 지금까지는 위의 그림처럼 테이블의 칼럼과 클래스의 속성을 1 vs 1로 매핑했다.

 

* 실제 모델

  • 실제로는 address1, address2, zipcode를 모아 Address로 나눠 표현한다.
  • 이러한 방법이 표현력 역시 좋다.

 

* @Embeddable

  • 엔티티가 아닌 타입이 한 개 이상의 필드와 매핑할 때 사용할 수 있는 것이 @Embeddable 애노테이션이다.
  • 대표적으로 Address, Money 등이 있다.
  • Address와 같은 값 타입 클래스에는 @Embeddable을 붙이고, Hotel과 같이 Embeddable한 타입을 사용할 Entity 클래스에서는 @Embedded를 해당 멤버에 붙여서 사용한다.

 

* 저장

  • Address 객체를 받은 Hotel 객체를 persist를 통해 저장하면, Address 의 각 값들이 저장된다.

 

* 조회

  • 마찬가지로 읽어온 값을 Address값으로 만들어 Hotel 객체에 넣어 알맞게 읽어온다

 

* null은?

  • 저장 될 때는 null 값으로 저장되고 조회할 때도 null로 조회한다.

 

* 같은 @Embeddable 타입 필드가 두 개면?

  • Emplyee 엔티티에 homeAddress 와 workAddress 두 개의 같은 Address 필드를 사용한다.
  • 서로 같은 칼럼에 매핑해야하기 때문에 EMF를 초기화 할 때 에러가 난다.

 

* @AttributeOverride로 설정 재정의

  • 새롭게 칼럼을 생성하고 생성한 칼럼에 기존 칼럼값을 매핑해서 저장한다.
  • waddress1, waddress2, wzipcode칼럼을 생성하고 해당 칼럼에 workAddress의 기존 값인 address1, address2, zipcode를 매핑해서 사용한다.

 

* 정리

  • @Embeddable을 사용하면 모델을 더 잘 표현할 수 있다.
  • 개별 속성을 모아서 이해 < 타입으로 더 쉽게 이해
    • (addr1, addr2, zipcode)를 모아서 '이것들이 주소구나' 라고 이해 < 주소네.
    • 추상화의 개념과 같다고 생각하면 된다.
반응형