스프링부트
데이터 바인딩 양방향 단방향 바인딩 설명
TacoRingo
2024. 4. 4. 23:16
<단방향 바인딩>
단방향 바인딩은 한 엔티티가 다른 엔티티를 참조하는 것으로,
다른 엔티티는 참조되는 엔티티를 알지 못한다
예를 들어, Author 엔티티가 Book 엔티티를 참조할 때
Author.java
@Entity
public class Author {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// 단방향 바인딩
@ManyToOne
private Book book;
}
Book.java
@Entity
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
}
Author 엔티티가 Book 엔티티를 참조하고 있습니다.
여기서 Book 엔티티는 Author 엔티티를 알 수 없습니다.
<양방향 바인딩>
양방향 바인딩은 두 엔티티가 서로를 참조하는 것을 의미합니다.
이를 위해서는 각 엔티티에 서로를 참조하는 필드를 추가해야 합니다.
Author.java
@Entity
public class Author {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// 양방향 바인딩
@ManyToOne
@JoinColumn(name = "book_id")
private Book book;
}
Book.java
@Entity
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
// 양방향 바인딩
@OneToMany(mappedBy = "book")
private List<Author> authors;
}
Spring Boot와 JPA를 사용할 때 이러한 관계를 설정하면 데이터베이스에서도 적절한 관계가 유지됩니다. 하지만 주의할 점은 양방향 관계에서는 순환 참조나 무한 루프를 방지하기 위해 적절한 설정이 필요할 수 있습니다. 예를 들어, JSON 직렬화 시에 무한루프에 빠지지 않도록 @JsonIgnore 어노테이션을 사용하거나 DTO를 사용하는 등의 방법을 고려할 수 있습니다