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에 .을 통해 설정할 수 있다!!!
728x90
반응형
'Study > JPA' 카테고리의 다른 글
@Embedded, @AttributeOverride (0) | 2022.06.03 |
---|---|
[JPA] Transactional(readOnley=true) 가 성능 향상이 되는 이유 (0) | 2022.05.31 |
페이징 QueryDSL (0) | 2022.05.13 |
Spring Data JPA - QueryDSL 쿼리 작성하기 (0) | 2022.05.13 |
[JPA] AuditEntity관련 내용 정리 (0) | 2022.04.19 |
댓글