Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 처음 만나는 AI수학 with Python
- 네트워크 설정
- 선형대수
- 구멍가게코딩단
- 스프링 시큐리티
- 코드로배우는스프링부트웹프로젝트
- baeldung
- network configuration
- GIT
- iterator
- 알파회계
- 이터레이터
- 자료구조와함께배우는알고리즘입문
- 리눅스
- ㅒ
- /etc/network/interfaces
- resttemplate
- 페이징
- 목록처리
- 처음 만나는 AI 수학 with Python
- 데비안
- 자바편
- 스프링부트핵심가이드
- 서버설정
- 자료구조와 함께 배우는 알고리즘 입문
- 코드로배우는스프링웹프로젝트
- 친절한SQL튜닝
- 티스토리 쿠키 삭제
- Kernighan의 C언어 프로그래밍
- d
Archives
- Today
- Total
bright jazz music
[bootBoard] N:1(다대일) 연관관계: 4. @ManyToOne 어노테이션 추가 본문
Framework/Spring
[bootBoard] N:1(다대일) 연관관계: 4. @ManyToOne 어노테이션 추가
bright jazz music 2022. 7. 26. 22:341. @ManyToOne 어노테이션
- DB구조로 보면 앞으로 생성될 board 테이블과 member테이블에는 FK를 이용한 참조가 걸려있게 된다.
- member 테이블의 email을 board에서 FK로 참조하는 구조이다.
- JPA에서 관계를 고민할 때는 FK쪽을 먼저 해석해 보면 편리하다. 따라서 FK를 사용하는 board 먼저 살펴본다.
- board와 member는 N:1(다대일)의 관계가 된다. 따라서 이를 의미하는 @ManyToOne을 적용해야 한다.
- @ManyToOne은 DB상에서 외래키의 관계로 연결된 엔티티 클래스에 설정한다.
- Board클래스는 작성자가 Member엔티티를 의미하므로 아래와 같이 FK를 참조하는 부분을 추가한다.
1-1. Board 클래스의 변경(Member writer 작성)
//Board.java
package com.example.bootboard.entity;
import lombok.*;
import javax.persistence.*;
@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@ToString
public class Board extends BaseEntity{
@Id
@GeneratedValue
private Long bno;
private String title;
private String content;
@ManyToOne
private Member writer; //FK 연관관계 지정
//Board클래스는 Member클래스의 email(PK)를 FK로 참조하는 구조이다.
}
1-2. Reply 클래스의 변경(Board board 작성)
//Reply.java
package com.example.bootboard.entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
public class Reply extends BaseEntity{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long rno;
private String text;
@ManyToOne
private Board board; //연관관계 지정
}
2. 프로젝트 실행 (DDL 실행 ==> 테이블 생성)
- 위와 같이 설정을 완료한 뒤에 프로젝트를 실행하면 아래와 같은 DDL(Data Definition Language)이 실행된다(콘솔확인)
Hibernate:
create table board (
bno bigint not null,
moddate datetime(6),
reg_date datetime(6),
content varchar(255),
title varchar(255),
writer_email varchar(255),
primary key (bno)
) engine=InnoDB
Hibernate:
create table member (
email varchar(255) not null,
moddate datetime(6),
reg_date datetime(6),
name varchar(255),
password varchar(255),
primary key (email)
) engine=InnoDB
Hibernate:
create table reply (
rno bigint not null auto_increment,
moddate datetime(6),
reg_date datetime(6),
text varchar(255),
board_bno bigint,
primary key (rno)
) engine=InnoDB
Hibernate:
alter table board
add constraint FK1iu8rhoim4thb0y12cpt01oiu
foreign key (writer_email)
references member (email)
Hibernate:
alter table reply
add constraint FKr1bmblqir7dalmh47ngwo7mcs
foreign key (board_bno)
references board (bno)
3. Repository 인터페이스 추가
- 테이블이 정상적으로 생성되었다,
- 각 엔티티에 맞는 Repository 인터페이스를 추가한다.
- 프로젝트에 repository 패키지를 생성하고 추가한다.
3-1. MemberRepository 작성
//MemberRepository.java
package com.example.bootboard.repository;
import com.example.bootboard.entity.Member;
import org.springframework.data.jpa.repository.JpaRepository;
public interface MemberRepository extends JpaRepository<Member, String> {
}
3-2. BoardRepository 작성
//BoardRepository.java
package com.example.bootboard.repository;
import com.example.bootboard.entity.Board;
import org.springframework.data.jpa.repository.JpaRepository;
public interface BoardRepository extends JpaRepository<Board, Long> {
}
3-3. ReplyRepository 작성
//ReplyRepository.java
package com.example.bootboard.repository;
import com.example.bootboard.entity.Reply;
import org.springframework.data.jpa.repository.JpaRepository;
public interface ReplyRepository extends JpaRepository<Reply, Long> {
}
'Framework > Spring' 카테고리의 다른 글
[bootBoard] N:1(다대일) 연관관계: 5. 연관 관계 추가 (0) | 2022.09.18 |
---|---|
스프링 부트 DB 설정 없이 구동하는 법 (0) | 2022.09.05 |
[bootBoard] N:1(다대일) 연관관계: 3. 프로젝트 구성 요소 작성(추가) (0) | 2022.07.26 |
[bootBoard] N:1(다대일) 연관관계: 2. 프로젝트 생성 (0) | 2022.07.25 |
[bootBoard] N:1(다대일) 연관관계: 1.연관관계와 DB 설계 (0) | 2022.07.25 |
Comments