etc/TIL
@Embedded와 @Embeddable을 이용하여 Entity의 가독성을 높이자
기억용블로그
2022. 4. 26. 19:30
728x90
JPA에서는 @Embeddable 애너테이션을 이용하여 해당 클래스가 다른 Entity에 의해 프로퍼티 값으로 들어갈 수 있음(embedded)을 의미한다.
public class Company {
private Integer id;
private String name;
private String address;
private String phone;
private String contactFirstName;
private String contactLastName;
private String contactPhone;
// standard getters, setters
}
회사라는 클래스에 있는 평범한 프로퍼티들이지만 연락할 수 있는 인원에 대한 정보는 따로 빼는 것이 좋아 보일때
@Embeddable
public class ContactPerson {
private String firstName;
private String lastName;
private String phone;
// standard getters, setters
}
와 같이 따로 꺼내어 클래스로 정의해주고
@Entity
public class Company {
@Id
@GeneratedValue
private Integer id;
private String name;
private String address;
private String phone;
@Embedded
private ContactPerson contactPerson;
// standard getters, setters
}
처럼 해당 클래스가 다른 클래스를 embed하고 있음을 나타내어 사용한다
@Embedded
@AttributeOverrides({
@AttributeOverride( name = "firstName", column = @Column(name = "contact_first_name")),
@AttributeOverride( name = "lastName", column = @Column(name = "contact_last_name")),
@AttributeOverride( name = "phone", column = @Column(name = "contact_phone"))
})
private ContactPerson contactPerson;
@AttriuteOverrides를 이용하여 JPA가 자동 생성 규칙에 따라 짓는 이름을 원하는 이름으로 매핑하여 사용할 수 있다.
@Embedded
private ContactPerson contactPerson = new ContactPerson();
마지막으로 사용할 때에는 항상 new 생성자로 생성하여 사용하도록 하자