엔티티 생성

2023. 2. 21. 17:19·프로젝트/게시판 프로젝트

그 동안의 많은 과정들을 거치고 나서 이제 엔티티 설계를 시작했다.

회원 정보가 담긴 Member

질문 정보가 담긴 Question

답변 정보가 담긴 Answer로 3가지의 엔티티를 설정했다.

 

우선 get,set을 편하게 사용하기 위해 롬복을 이용해서 @Getter, @Setter을 달아주었다.

실무에서는 @Setter을 쓰지 않고 생성자나 메서드를 이용하는 것이 좋지만 이 프로젝트는 간단히 만드는 것이라 편의상 @Setter을 달아주었다.

 

id는 회원들을 구분할 수 있는 고유의 PK라는 것을 나타내주기 위해 @Id를 달아줬고

@GeneratedValue는 PK값 생성전략인데 다른 전략들도 있지만 기본 전략은 AUTO인데 데이터 베이스에 따라 전략을 자동으로 선택해줘서 바꿔준다.

그리고 IDENTITY전략도 있는데 이것은 데이터 베이스에 PK생성을 위임하지만 쓰기 지연 로딩이 안되서 내가 엔티티 설계를 한 방향과는 맞지 않아 그냥 기본 전략을 AUTO로 만들었다.

 

그리고 @Column을 통해 이름을 따로 지정해주었고 사실 이름을 따로 지정해주지 않아도 자동으로 이름이 엔티티와 변수에 따라서 지정해주긴 한다. 하지만 엔티티 설계 단계에서 명확하게 이름이 보여지는 편이 더 좋아서 이름을 지정해주었다.

 

그리고 name과 email의 @Column(unique = true) 설정은 name(회원 로그인 아이디)나 email은 중복으로 설정하면 안되서 따로 설정을 만들어 주었다.

 

 

다음은 질문 엔티티 차례인데 앞서 설명한 부분말고

subject변수에서 @Column에 length 조건은 최대 길이를 제한해주는 것이고

content변수에서 columnDefinition = "TEXT"는 String일 경우 글자수의 제한이 생겨서 그 제한을 풀어주는 것이다.

content는 내용이기 때문에 많은 글을 담아야되서 따로 이 설정을 해주었다.

 

그리고 회원은 여러 개의 질문을 작성할 수 있으므로 @ManyToOne을 member에 적용했고

FetchType.Lazy(지연로딩)는 일반적으로 @XXToOne에는 FetchType이 Eager(즉시 로딩)이 기본 값인데

즉시 로딩은 일반적으로 실무에서 잘 사용하지 않는다.

왜냐하면 즉시로딩으로 엔티티들을 사용하면 어떠한 객체를 사용시 그와 연관된 객체들이 같이 한번에 조회가 되면서

원치 않는 SQL문이 나갈 수도 있기 때문이다. 그래서 지연 로딩을 사용하는 것이 SQL문이 조금 더 적히더라도 사용하기 좋다. 

@JoinColumn으로 Member 엔티티의 id값("member_id")에 FK로 연결을 하고 연관관계의 주인을 Question 엔티티로 설정한다.

 

@OneToMany는 기본이 지연로딩이기때문에 따로 설정할 필요는 없고 mappedBy를 통해서 연관관계의 주인이 누구인지를 표시해 준다. 그리고 cascade 타입을 REMOVE로 설정하면 엔티티를 제거시 연관된 엔티티를 모두 제거하는 것인데

일반적으로 질문을 지웠을 때, 연관된 답변도 같이 다 지워져서 REMOVE로 설정을 해주었다.

 

답변 엔티티는 앞에 다 설명한 내용이기 때문에 코드만 올려놓는다.

저작자표시 비영리 (새창열림)

'프로젝트 > 게시판 프로젝트' 카테고리의 다른 글

QuestionRepository 테스트 코드  (0) 2023.02.23
설정 오류 발생(초기 DB연결 오류)  (0) 2023.02.21
게시판 ERD  (0) 2023.02.20
게시판 프로젝트 시작 및 세팅  (0) 2023.02.17
'프로젝트/게시판 프로젝트' 카테고리의 다른 글
  • QuestionRepository 테스트 코드
  • 설정 오류 발생(초기 DB연결 오류)
  • 게시판 ERD
  • 게시판 프로젝트 시작 및 세팅
BvrPark
BvrPark
코드 퍼즐과 개발 일상
  • BvrPark
    비버의 개발 일지
    BvrPark
  • 전체
    오늘
    어제
    • 분류 전체보기 (121)
      • JAVA (7)
        • 메서드 외울 것 (2)
      • 프로그래머스 (56)
        • 총 풀이 코드(깃허브) (1)
        • Level 1 (22)
        • Level 2 (33)
      • 백준 알고리즘(단계 별) (16)
        • 총 풀이 코드(깃허브) (1)
        • 1. 입출력과 사칙연산 (2)
        • 2. if 문 (2)
        • 3. for문 (1)
        • 4. while문 (2)
        • 5. 1차원 배열 (3)
        • 6. 함수 (1)
        • 7. 문자열 (1)
        • 8. 기본수학 1 (3)
      • 백준 알고리즘(solved.ac) (9)
        • 총 풀이 코드(깃허브) (1)
        • class2 (8)
      • LeetCode 문제 풀이 (4)
        • 총 풀이 코드(깃허브) (1)
        • Easy (3)
      • 코드업 알고리즘 (7)
      • git과 github사용법 (4)
      • html, css, javaScript (2)
      • 프로젝트 (11)
        • 순수 Java 프로젝트 (2)
        • 쇼핑몰 프로젝트 (2)
        • 게시판 프로젝트 (5)
        • 근태관리 프로젝트 (2)
      • 커피타임 (2)
        • 2023년 (2)
        • 2024년 (0)
  • 블로그 메뉴

    • 링크

      • 포트폴리오
      • 깃허브
    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • Designed By정상우
    BvrPark
    엔티티 생성
    상단으로

    티스토리툴바