Notice
Recent Posts
Link
Tags
- mysql
- 스프링
- AWS
- spring security 6
- Django
- jpa
- DI
- join
- java
- select
- 문자열
- SSL
- @transactional
- Git
- 1차원 배열
- springboot
- PYTHON
- ORM
- spring
- spring boot
- sql
- 자바
- 스프링부트
- 프로그래머스
- session
- Docker
- spring mvc
- 데이터베이스
- nginx
- string
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Archives
개발하는 자몽
[JPA] Entity - 매핑 관계 본문
예를 들어 질문 게시판을 구현한다고 하자. 그렇다면 질문 엔티티와 답변 엔티티가 필요하다. 이때 고려해야 할 점은 매핑 관계이다. 하나의 질문에는 여러 개의 답변이 달릴 수 있고, 하나의 답변은 여러 개의 질문에 달릴 수 있다.
- 답변 엔티티 입장에서 질문 엔티티와의 매핑 관계 → 1 : N
- 질문 엔티티 입장에서 답변 엔티티와의 매핑 관계 → N : 1
이를 위한 어노테이션으로 @ManyToOne과 @OneToMany를 사용할 수 있다. 해당 어노테이션을 사용하면 실제 데이터베이스에서는 ForeignKey(FK) 관계가 생성된다.
(@ManyToOne은 부모 자식 관계를 갖는 구조에서 사용한다. 여기서 부모는 질문, 자식은 답변이라고 할 수 있다.)
질문 엔티티 - Question.java
@Getter
@Builder
@Entity
public class Question {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(length=200)
private String subject;
@Column(columnDefinition = "TEXT")
private String content;
private LocalDateTime createAt;
@OneToMany(mappedBy = "question", cascade = CascadeType.REMOVE) //1:N
private List<Answer> answers;
}
@OneToMany의 속성인 mappedBy는 참조 엔티티의 속성명을 의미한다. 즉, Answer 엔티티에서 Question 엔티티를 참조한 속성명 question을 mappedBy에 전달해야 한다.
답변 엔티티 - Answer.java
@Getter
@Builder
@Entity
public class Answer {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(columnDefinition = "TEXT")
private String content;
private LocalDateTime createAt;
@ManyToOne
private Question question; //N:1
}
CascadeType.REMOVE
질문 하나에는 여러 개의 답변이 작성될 수 있다. 이때 질문을 삭제하면 여기에 달린 답변들도 모두 함께 삭제돼야 한다. 이를 위해 @OneToMany의 속성인 cascade = CascadeType.REMOVE를 사용한다.
▶ 참고 : https://www.baeldung.com/jpa-cascade-types
참고
'Java > Spring' 카테고리의 다른 글
[Spring Security] BCryptPasswordEncoder (0) | 2023.01.02 |
---|---|
[Spring Security] @EnableWebSecurity (0) | 2022.12.30 |
[JPA] Hibernate의 데이터베이스 초기화 전략 (0) | 2022.12.21 |
[Spring]JdbcTemplate (0) | 2022.09.30 |
스프링 예외 추상화 (1) | 2022.09.29 |
Comments