
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
'BackEnd > Security · JPA' 카테고리의 다른 글
[ JPA ] 동적 쿼리 처리를 해주는 Querydsl 사용해보기 (1) | 2023.04.16 |
---|---|
[ Security ] 시큐리티 - 로그인 (0) | 2023.04.04 |
[ JPA ] @Query ( 쿼리 커스텀 ) - Native Query (0) | 2023.03.31 |
[ JPA ] Cascade ( 영속성 전의 ) - 고아제속성 (0) | 2023.03.31 |
[ JPA ] Transaction (0) | 2023.03.30 |