본문 바로가기

JPA

2월 3일 JPA 임베디드 속성의 재정의

@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이 되게 된다,