minlog
article thumbnail

1. Embeddable

반복된 코드는 Embedded JAVA클래스로  따로 생성 해준다. 

JPA 테이블 생성시 Entity  객체의 필드로 포함이 되는 것을 확인 할 수 있다. 

근로기간, 전화번호, 주소 같은 내용들을 Embeddable로 사용할 수 있다.

 

 

ex) 회원정보 테이블과 회원정보 히스토리 테이블

1.0.1. 1. 공통 된 코드 ( Embeddable) 객체 생성.

@Embeddable - entity 내부에 선언 할수 있게됨

 

📑 Address.java

<java />
@Data @AllArgsConstructor @NoArgsConstructorE @Embeddable public class Address{ private String city; //시 private String district; //구 @Column(name="address_detail") private String detail; //상세주소 private String zipCode; //우편주소 }

 

1.0.2. 2. 사용할 Entity 객체에 필드 생성.

@Embedded -  Embedded 된 객체임을 선언하여 사용한다. 

📑user.java

📑userHistory.java

<java />
@Embedded private Address address

 

 

1.0.3. 3. 맵핑이 잘되어 생성되는지 확인.

📑테스트 코드

<java />
@Test void embedTest(){ userRepository.findAll.forEach(System.out::println); User user = new User(); user.setName("testUser"); user.setAddress(new Address("서울시","강남구","강남대로 363","06241")); userRepository.save(user); userRepository.findAll.forEach(System.out::println); }

 

 

1.0.4. 4. 사용할 Entity 객체에 내에서 Embedded객체를 여러번 사용가능하다.

@Embedded -  Embedded 된 객체임을 선언하여 사용한다. 

 

동일한 Address 객체의 명칭을 재정의 해주면 사용이 가능하다.

@AttributeOverrides 어노테이션을 사용해서 해당 속성값을 재정의 가능 하다. 

 

📑user.java

<java />
@Embedded @AttributeOverrides({ @AttributeOverrides(name="city", column = @Column(name="home_city")), @AttributeOverrides(name="district", column = @Column(name="home_district")), @AttributeOverrides(name="detail", column = @Column(name="home_address_detail")), @AttributeOverrides(name="zipCode", column = @Column(name="home_zipCode")) }); private Address homeAddress @Embedded @AttributeOverrides({ @AttributeOverrides(name="city", column = @Column(name="company_city")), @AttributeOverrides(name="district", column = @Column(name="company_district")), @AttributeOverrides(name="detail", column = @Column(name="company_address_detail")), @AttributeOverrides(name="zipCode", column = @Column(name="company_zipCode")) }); private Address companyAddress

 

 

profile

minlog

@jimin-log

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!