HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🤩
개발
/
Spring Data
Spring Data
/
🧣
JPA(Java Persistence API)
/
📠
@Embeddable, @Embedded
📠

@Embeddable, @Embedded

  • Embeddable 객체 안에서도 @Column 같은 annotation 사용 가능
  • @Embeddable의 진짜 큰 장점은 집 주소와 회사 주소 이런 식의 정보를 모두 entity에 담아야 할 때, Embed를 쓰지 않으면 모든 필드를 각각 다 만들어주어야 함 → DRY(Do not Repeat Yourself) 위반.
@Embeddable // Embed를 할 수 있는 클래스. Entity 내부에 embed 할 수 있음 @Data @NoArgsConstructor @AllArgsConstructor public class Address { private String city; private String district; @Column(name="address_detail") private String detail; private String zipCode; } private String homeCity; private String homeDistrict; private String homeDetail; private String homeZipCode; private String companyCity; private String companyDistrict; private String companyDetail; private String companyZipCode; // >>>>>>>>>> @Embedded @AttributeOverrides(value={ @AttributeOverride(name="city", column=@Column(name="home_city")), @AttributeOverride(name="district", column=@Column(name="home_district")), @AttributeOverride(name="detail", column=@Column(name="home_address_detail")), @AttributeOverride(name="zipCode", column=@Column(name="home_zip_code")), }) private Address homeAddress; @Embedded private Address companyAddress;
  • 그냥 Address로 두 개 만들면 field이름 중복되기 때문에 @AttributeOverrides를 이용하여 column이름을 지정해 줄 수 있음
  • new Address() 나 null이나 어차피 각각의 필드에 다 null을 넣게 됨으로 결과는 같게 됨