[Spring] JPA 객체 간 관계 매핑 - @Embedded와 @Embeddable

개발log·2024년 4월 27일

Spring

목록 보기
9/16
post-thumbnail

@Embedded@Embeddable는 관계형 데이터베이스에서 객체 간의 관계를 매핑하는 데 사용된다.


@Embedded

  • 값을 사용하는 곳에 사용
  • 엔티티 클래스에서 @Embedded 클래스를 내장할 때 사용된다.
  • 객체 지향 프로그래밍 관점에서 하나의 객체 안에 다른 객체를 담을 때 사용한다.
  • 내장 가능한 클래스를 엔티티의 속성으로 사용하기 위해 해당 속성에 @Embedded 어노테이션을 붙인다.
  • 이를 통해 내장 가능한 클래스의 필드들이 엔티티의 테이블에 컬럼으로 매핑된다.
@Entity
public class Student {
	@Id
    private Long id;
    private String name;
    
    @Embedded
    private Address address;
}

위의 예제는 Address 클래스를 Student 엔티티에 내장하겠다는 것을 의미한다.
Student 테이블에 Address의 필드들이 칼럼으로 추가된다.


@Embeddable

  • 값을 정의하는 곳에 사용
  • JPA 엔티티에서 내장될 수 있는 클래스를 나타낸다.
  • 내장 가능한 클래스는 데이터베이스 테이블을 생성하지 않고 엔티티의 속성으로 사용될 수 있다.
  • 내장 가능한 클래스의 필드들은 테이블의 열이 아니라 부모 엔티티의 열로 매핑된다.
@Embeddable
public class Address {
	private String street;
    private String city;
}

Address 클래스는 내장 가능한 클래스임을 나타내고 있다.
Address 클래스의 인스턴스가 데이터베이스에 따로 테이블로 생성되지 않고, Student 테이블의 칼럼으로 포함된다.


정리

@Embeddable은 엔티티에 내장될 수 있는 클래스를 나타내고, @Embedded는 엔티티 클래스에서 실제로 내장 가능한 클래스를 사용하기 위해 지정하는 데 사용된다.

profile
나의 개발 저장소

0개의 댓글