HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🤩
개발
/
Spring Data
Spring Data
/
🧣
JPA(Java Persistence API)
/
🏗️
값 타입
🏗️

값 타입

기본 값 타입임베디드 타입@AttributeOverride : 속성 재정의값 타입 컬렉션
  • 식별자가 없고 숫자나 문자같은 속성만 있으므로 추적할 수 없음

기본 값 타입

  • 자바 기본 타입(int, double)
  • 래퍼 클래스(Integer)
  • String

임베디드 타입

@Entity public class Member{ @Id @GeneratedValue private Long id; private String name; @Embedded Period workPeriod; @Embedded Address homeAddress; } @Embeddable public class Period{ } @Embeddable public class Address{ }
  • 임베디드 타입을 포함한 모든 값 타입은 엔티티의 생명주기에 의존하므로 엔티티와 임베디드 타입의 관계를 UML로 표현하면 컴포지션 관계가 됨
    • UML에서 기본 타입처럼 단순히 표현
      UML에서 기본 타입처럼 단순히 표현
  • 임베디드 타입은 기본 생성자가 필수임
  • 임베디드 타입은 값 타입을 포함하거나 엔티티를 참조할 수 있음
@Embeddable public class Address{ String street; String city; String state; @Embedded Zipcode zipcode; // 임베디드 타입 포함 }} @Embeddable public class PhoneNumber{ String areaCode; String localNumber; @ManyToOne PhoneServiceProvider provider; // 엔티티 참조 }

@AttributeOverride : 속성 재정의

  • 임베디드 타입에 정의한 매핑정보를 재정의하려면 엔티티에 @AttributeOverride를 사용하면 됨
@Entity public class Member{ @Id @GeneratedValue private Long id; private String name; @Embedded Address homeAddress; @Embedded @AttributeOverrides({ @AttributeOverride(name="city" column=@Column(name="COMPANY_CITY")), @AttributeOverride(name="street" column=@Column(name="COMPANY_STREET")), @AttributeOverride(name="zipcode" column=@Column(name="COMPANY_ZIPCODE")) }) Address companyAddress;

값 타입 컬렉션

  • 값 타입을 하나 이상 저장하려면 컬렉션에 보관하고 @ElementCollection, @CollectionTable 어노테이션을 사용하면 됨
@Entity public class Member{ @Id @GeneratedValue private Long id; @Embedded private Address homeAddress; @ElementCollection @CollectionTable(name="FAVORITE_FOODS", joinColumns= @JoinColumn(name="MEMBER_ID")) @Column(name="FOOD_NAME") private Set<String> favoriteFoods = new HashSet<String>(); @ElementCollection @CollectionTable(name="ADDRESS", joinColumns=@JoinColumn(name="MEMBER_ID")) private List<Address> addressHistory = new ArrayList<>(); // ... }
  • 관계형 데이터베이스의 컬럼은 컬렉션을 포함할 수 없기에 별도의 테이블을 추가하고 @CollectionTable을 사용해서 추가한 테이블을 매핑 해야함