Study/JPA

[JPA] @AttributeOverride - 매핑 정보 재정의

오늘만 사는 여자 2022. 5. 25. 16:13
728x90
반응형

@AttributeOverride

@MappedSuperclass를 통해 상속 받은 경우나 @Embedded를 통해 다른 객체를 필드에 선언한 경우 해당 엔티티에서는 다른 컬럼명을 사용하고 싶을 때가 있다.

이러한 경우에 사용할 수 있는 어노테이션이다.

@AttributeOverride 혹은 @AttributeOverrides를 사용할 수 있으며, 사용 방법은 다음과 같다.

 

@MappedSuperclass
public class Vehicle {
    @Id
    @GeneratedValue
    private Integer id;
    private String identifier;
    private Integer numberOfWheels;
    
    // standard getters and setters
}
@Entity
@AttributeOverride(name = "identifier", column = @Column(name = "VIN"))
public class Car extends Vehicle {
    private String model;
    private String name;

    // standard getters and setters
}

부모 클래스(Vehicle)의 identifier 속성을 VIN으로 재정의하여 사용하였다.

 

 

 

@Entity
@AttributeOverrides({
	@AttributeOverride(name = "id", column = @Column(name = "CAR_ID"))
	@AttributeOverride(name = "identifier", column = @Column(name = "VIN"))
})
public class Car extends Vehicle {
    private String model;
    private String name;

    // standard getters and setters
}

위와 같이 여러 필드를 재정의할 수 있다.

 

 

 

임베디드 타입 속 임베디드 타입 속성 재정의하기.

@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
@Setter
@Getter
public class Member{

    @Id @GeneratedValue
    @Column(name = "MEMBER_ID")
    private Long id;


    private String name;

    @Embedded
    @AttributeOverrides({
            @AttributeOverride(name = "city", column = @Column(name = "HOME_CITY")),
            @AttributeOverride(name = "street", column = @Column(name = "HOME_STREET")),
            @AttributeOverride(name = "zipcode.zip", column = @Column(name = "HOME_ZIP")),
            @AttributeOverride(name = "zipcode.plusFour", column = @Column(name = "HOME_PLUS_FOUR")),
    })
    private Address homeAddress;


    @Embedded
    @AttributeOverrides({
            @AttributeOverride(name = "city", column = @Column(name = "COMPANY_CITY")),
            @AttributeOverride(name = "street", column = @Column(name = "COMPANY_STREET")),
            @AttributeOverride(name = "zipcode.zip", column = @Column(name = "COMPANY_ZIP")),
            @AttributeOverride(name = "zipcode.plusFour", column = @Column(name = "COMPANY_PLUS_FOUR")),
    })
    private Address companyAddress;


}
@Embeddable
public class Address {

    private String city;
    private String street;

    @Embedded
    private Zipcode zipcode;
}
@Embeddable
public class Zipcode {

    private String zip;
    private String plusFour;
}

name에 .을 통해 설정할 수 있다!!!

 

출처 :  https://ttl-blog.tistory.com/133

728x90
반응형