BackEnd/Security · JPA
[ JPA ] Embedded - 재활용 가능한 Entity
jimin-log
2023. 4. 2. 13:06
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