minlog
article thumbnail

Embeddable

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

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

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

 

 

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

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

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

 

📑 Address.java

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

 

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

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

📑user.java

📑userHistory.java

@Embedded
private Address address

 

 

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

📑테스트 코드

@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);
}

 

 

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

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

 

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

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

 

📑user.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

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