@OneToOne에서 순환참조해결 -DTO사용
순환 참조 문제를 해결하지 않고 양방향 @OneToOne 관계를 사용하는 경우가 있습니다. 그 예시는 DTO(Data Transfer Object)를 사용하는 경우입니다.
DTO를 사용하여 엔티티를 JSON으로 변환하고, 순환 참조가 발생하지 않도록 엔티티 간 관계를 정의할 수 있습니다. 예를 들어, 아래는 양방향 @OneToOne 관계를 가진 Person과 Address 엔티티와 이에 대응하는 DTO 클래스입니다.
@Entity
public class Person {
@Id
@GeneratedValue
private Long id;
private String name;
@OneToOne(mappedBy = "person")
private Address address;
}
@Entity
public class Address {
@Id
@GeneratedValue
private Long id;
private String street;
@OneToOne
@JoinColumn(name = "person_id")
private Person person;
}
public class PersonDTO {
private Long id;
private String name;
private AddressDTO address;
}
public class AddressDTO {
private Long id;
private String street;
}
이렇게 PersonDTO와 AddressDTO 클래스를 사용하면, 엔티티간의 관계가 순환 참조를 발생시키지 않습니다. 이 경우에는 양방향 @OneToOne 관계를 사용하면서 별도의 어노테이션을 사용하지 않았습니다. 이 방식을 사용하려면 엔티티를 DTO 객체로 변환하는 로직이 필요합니다.