@AttibuteOverride : 속성의 재정의
한 엔티티에서 같은 값 타입을 사용한다면?
컬럼명이 중복되게 된다.
예를들어
@Embadded
private Address homeAddress
와
@Embadded
private Address workAddress
같은 임베디드 클래스를 한 엔티티에서 여러번 사용하게되면
그 안에있는 필드는 같기 때문에 DB에 컬럼이 중복되게 된다.
그로 인해서 오류가 발생한다.
이런 경우 한 엔티티에서 같은 임베디드를 여러번 쓰는 방법은 다음과 같다
여러개의 필드일때 @AttributeOverride
하나의 필드 일때 @AttributeOverrid
사용법
@Embadded
private Address homeAddress ; //기존에 사용하던 임베디드타입 필드
@Embadded
@AttributeOverrides({
@AttributeOverride(name = "city" , Column(name ="work_city")),
@AttributeOverride(name = "street" , Column(name = "work_street"))
@AttributeOverride(name = "zipcode" , Column(name = "work_zipcode"))
})
private address workAddress;
이때 주의점은 같은 임베디드라서 기본적으로 같은 컬럼을 바라보기 때문에 문제가 발생하는것이다.
그래서 추가로 임베디드를 사용할때는 @AttributeOverride를 사용해서
새로 사용할 임베디드의 필드들이 테이블의 다른 컬럼을 바라보게 해주는 것이다.
임베디드 타입과 null
@embadded로 선언된 필드값을 null로 주게되면
그 하위 필드들의 값도 모두 null이 되게 된다,
'JPA' 카테고리의 다른 글
| 2월 6일 JPA 값타입 비교 (0) | 2023.02.06 |
|---|---|
| 2월 6일 JPA 값타입과 불변객체 (0) | 2023.02.06 |
| 2월 3일 JPA 임베디드 클래스 실사용 (0) | 2023.02.03 |
| 2월 3일 JPA 임베디드 타입class와 테이블을 매핑 (0) | 2023.02.03 |
| 2월 2일 JPA cascade 의 종류 (0) | 2023.02.03 |