2024. 8. 27. 21:12ㆍ자바 웹 개발/스프링부트
엔티티란?
엔티티는데이터베이스 테이블과 매핑되는 자바 클래스를 말한다. 질문과 답변을 할 수 있는 게시판을 작성하기 위해서는 질문과 답변 데이터를 제정할 데이터베이스 테이블과 매핑된다.
질문 엔티티
엔티티를 만들기 위해서는 @Entity로 애너테이션을 적용해야 한다.
@Getter
@Setter
@Entity
public class Question {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(length = 200)
private String subject;
@Column(columnDefinition = "TEXT")
private String content;
private LocalDateTime createDate;
}
@Id : id 속성을 기본키로 지정한다. 각 데이터를 구분하는 값으로 중복될 수 없도록 한다.
@GeneratedValue : 데이터 저장할 때 값을 입력하지 않아도 자동으로 1씩 증가하도록 저장한다. strategy = GenerationType.IDENTITY는 고유한 번호를 생성하는 방법을 지정하는 부분이다. 해당 속성만 별도로 번호가 차례대로 늘어나도록 사용한다.
@Column : 열의 세부 설정을 위해 쓰인다. length는 열의 길이를 설정할 때 사용하고, columnDefinition은 열 데이터의 유형이나 성격을 정의할 때 사용한다.
@Transient : 열로 인식하고 싶지 않을 때 사용한다. 엔티티 속성은 @Column 애너테이션을 사용하지 않더라도 열로 인식한다.
답변 엔티티
질문 엔티티를 참조하기 위해서 question 속성을 추가하였다. 질문 엔티티와 연결된 속성이라는 것을 표시해야만 하는데 이를 위해 @ManyToOne 애너테이션을 추가하였다. 하나의 질문에 답변은 여러개가 달릴 수 있기 때문이다. 데이터베이스에서는 외래키를 이용해 관계를 맺는다. 반대로는 @OneToMany를 사용한다.
@Getter
@Setter
@Entity
public class Answer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(columnDefinition = "TEXT")
private String content;
private LocalDateTime createDate;
@ManyToOne
private Question question;
}
@Getter
@Setter
@Entity
public class Question {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(length = 200)
private String subject;
@Column(columnDefinition = "TEXT")
private String content;
private LocalDateTime createDate;
@OneToMany(mappedBy = "question", cascade = CascadeType.REMOVE)
private List<Answer> answers;
}
mappedBy는 참조 엔티티의 속성명을 정의한다. mappedBy = "question"이라는 것은 Answer 엔티티 안에 있는 question 필드가 이 관계의 주인이라는 의미입니다. 즉, Answer 엔티티의 question 필드가 외래 키를 가지고 있으며, Question 엔티티는 이 필드를 통해 여러 Answer 엔티티와 연결된다는 뜻이다.
cascade = CascadeType.REMOVE는 질문을 삭제하면 답변들도 모두 삭제되도록 한 것이다.
'자바 웹 개발 > 스프링부트' 카테고리의 다른 글
[SpringBoot] 템플릿 설정 (0) | 2024.08.28 |
---|---|
[SpringBoot] 리포지터리 데이터베이스 관리 기본 기능 (0) | 2024.08.27 |
[SpringBoot] JPA로 데이터베이스 사용하기 (0) | 2024.08.27 |
[SpringBoot] 컨트롤러, 매핑 (0) | 2024.08.26 |
[SpringBoot] 스프링부트 프로젝트 구조 (0) | 2024.08.26 |