파일첨부_파일이름 저장 Entity 설계 및 참조관계
by 볼빵빵오춘기Point
board_table(부모) - board_file_table(자식) 관계이다.
따라서 conttraint 로 제약조건을 건다.
(⇒ board_file_table 에 board_id 컬럼은 board_table에 id가 삭제되면 같이 삭제된다.)
BoardFileEntity
- 클래스 생성, 필드 추가, 참조관계 설정한다.
- 참조관계 필드
- BoardFileEntity와 Board2Entity가 관계를 맺어야한다.
- BoardFileEntity에서는 Board2Entity과 어떤 관계냐 참조관계를 설정해야한다.
생각해보면 게시글 하나에 여러 개의 파일이 올 수 있다.
하지만 하나의 파일에 여러 개의 게시물과 매칭할 수 는 없다.
⇒ BoardFileEntity 에서는 그러면 N:1 관계인 것!
⇒ @ManyToOne(fetch = FetchType.LAZY) 사용
⇒ fetch = FetchType.LAZY 는 부모와 join을 했을 때는 필요한 상황에 필요정보만 호출해서 쓸 수 있다.
⇒ fetch = FetchType.EAGER 도 있는데 이것은 join했을 때 부모 정보, 자식정보 다 가져온다.
⇒ 보통 fetch = FetchType.LAZY 을 많이 사용한다.
⇒ BoardFileEntity에서 Board2Entity에서 DB에 어떤 컬림이 join이 되느냐
⇒ @JoinColumn(name = "board_id")
⇒ 실제 DB에는 bigint로 만들어 진다.
⇒ 필드로 정의할 때는 부모로 정의하면 된다.
@Entity
@Getter
@Setter
@Table(name="board_file_table")
public class BoardFileEntity extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String originalFileName;
@Column
private String storedFileName;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "board_id")
private Board2Entity boardEntity;
}
Board2Entity
참조관계를 설정한다.
BoardFileEntity와 Board2Entity가 관계를 맺어야한다.
BoardFileEntity에서는 Board2Entity과 어떤 관계냐 참조관계를 설정해야한다.
생각해보면 게시글 하나에 여러 개의 파일이 올 수 있다.
하지만 하나의 파일에 여러 개의 게시물과 매칭할 수 는 없다.
⇒ Board2Entity에서는 1:N 관계 인 것!
⇒ @OneToMany 사용
⇒ mappedBy=”boardEntity” 적힌 부분은
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "board_id")
private Board2Entity boardEntity; // <= 여기 부분과 맞춰부면된다.
⇒ cascade = CascadeType.REMOVE, orphanRemoval = true (sql 쿼리에서 on delete cascade 설정 해준 부분)
⇒ private List<BoardFileEntity> boardFileEntityList = new ArrayList<>();
⇒ 게시물 하나에 여러개의 파일이 올 수 있으므로 List타입으로 선언한다.
⇒ 그렇다고 해서 DB에 List타입으로 정의되거나 하는건 아니다.
@OneToMany(mappedBy = "boardEntity", cascade = CascadeType.REMOVE, orphanRemoval = true, fetch = FetchType.LAZY)
private List<BoardFileEntity> boardFileEntityList = new ArrayList<>();
application.properties
ddl-auto 를 create 로 변경한다.
create로 변경해야지만 Entity 변경된 사항이 DB에 다시 설정된다.
#h2 console
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
#h2 db
spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
#hibernate
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.hibernate.ddl-auto=create
'강의 따라하기 > member2' 카테고리의 다른 글
파일첨부_파일첨부 완료 후 게시글 조회시 이미지 출력 (0) | 2023.12.30 |
---|---|
파일첨부_게시글 및 파일이름 DB 저장 처리 (0) | 2023.12.29 |
파일첨부_파일 로컬에 저장하기 (0) | 2023.12.29 |
파일첨부_첨부파일 요청보내기 (0) | 2023.12.29 |
파일첨부_파일첨부 기능 소개 (0) | 2023.12.29 |
블로그의 정보
Hello 춘기's world
볼빵빵오춘기