본문 바로가기
PlayGround/마실가실 리팩토링

[1년 후 마실가실] Entity 수정

by HJ0216 2024. 7. 28.

1년 전 진행했던 마실가실 프로젝트를 🛠️리팩토링하며 정리한 내용입니다.

 

Table을 만드는 방법은 크게 2가지입니다.

* Database에서 직접 CREATE TABLE 하기

* JPA의 DDL 생성 기능 활용하기

 

원래도 JPA의 DDL문 생성 기능을 활용했으므로 Column만 먼저 바꿔볼 예정입니다.

관계에 의한 Mapping도 변경을 해줘야하는데, 그건.. 차근차근 해보겠습니다🫠.

 

+ 리팩토링

  • UserEntity.java → User.java
    • 의미없는 Annotation 정리(사용하지 않는 값, Default값 사용 등)
    • PK값 데이터 타입을 조회 성능을 고려하여 varchar → Integer 변경 
    • 데이터 입력 자동화
      • @CreatedDate, @LastModifiedDate

 

+ 리팩토링

  • TripSchedule.java → Trip.java
  • 의미없는 Annotation 정리
    • @Buider와 @NoArgsConstructor
      • 상황
        • Trip Entity는 기본 생성자가 필요한 상황이나 모든 필드를 대상으로 하는 AllArgsConstructor는 필요 없는 상황
      • 문제
        • @Buider, @NoArgsConstructor만 사용 시, 'constructor Trip in class Trip cannot be applied to given types' 오류 발생
      • 원인
        • 클래스 레벨 @Builder
          • 생성자가 없는 경우, @Builder는 클래스의 모든 멤버 변수를 파라미터로 받는 생성자를 생성
          • 생성자가 이미 있는 경우, @Builder는 기존의 생성자를 활용하며 새로운 생성자를 생성하지 않음
        • @NoArgsConstructor에 의해 기본 생성자 생성 → @Builder 추가적인 생성자 생성 X
        • 이후, @Builder에 의해 생성된 빌더 클래스 내부에서 해당 타입의 인스턴스를 생성할 때 모든 멤버 변수를 초기화하는 생성자 호출 시도
          • required: no arguments
          • found: all arguments
      • 해결 방법
        • @Builder 어노테이션을 생성자 레벨에서 사용
        • @AllArgsConstructor 추가 사용

 

+ 리팩토링

  • TripDailySchedule.java → TripDay.java
    • ERD에 맞춰서 수정

 

+ 리팩토링

  • TripDatailSchedule.java → DayDestination.java
    • ERD에 맞춰서 수정

 

+ 리팩토링

(2024.08.04)

  1. 복합키 설정
    • 일정 테이블과 리뷰 사진 테이블에 복합키 설정 추가
    • @IdClass 사용
    • 연관 관계 매핑 시, @JoinColumns로 변경
  2. 양방향 연관 관계 매핑 → 단방향 연관 관계 매핑
    • 양방향 참조 관계 설정으로 인한 toString()의 무한 루프 오류를 줄이기 위해 초기 단방향 참조 관계 설정 후, 필요시 양방향 참조 관계로 변경 예정
    • 양방향 연관 관계 설정 시 유의 사항
      • 주인 = 외래키를 보유하고 있는 곳, 1:N 관계에서 N에 해당하는 곳, @ManyToOne 어노테이션을 사용하는 곳

 

 

 

🙋‍♀️

본 포스트는 공부 목적으로 작성하였습니다.
보시는 도중 잘못된 부분이나 개선할 부분이 있다면 댓글로 알려주시면 수정하도록 하겠습니다.

 

📑

참고 자료

 

[JPA_Basic] ERD를 기반으로 한 Entity 작성

이 글은 김영한의 [자바 ORM 표준 JPA 프로그래밍 - 기본편]을 수강하며 정리한 글입니다. 👉 기본 환경 - Language: Java - DB: H2 Database - IDE: IntelliJ ERD Member Entity 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 2

hj0216.tistory.com

 

JPA @CreatedDate @LastModifiedDate 생성 시간, 수정 시간이 저장되는 원리

@CreatedDate, @LastModifiedDate 데이터를 저장할 때 '생성된 시간 정보'와 '수정된 시간 정보'는 여러모로 많이 사용되고 또 중요합니다. JPA를 사용하면서 @CreatedDate, @LastModifiedDate를 사용하여 생성된 시

wildeveloperetrain.tistory.com

 

Lombok - @Builder와 @NoArgsConstructor 함께 사용시 발생하는 오류와 해결법

Lombok 라이브러리는 Java에서 반복적인 코드를 줄이기 위한 유용한 도구 중 하나이다.그 중에서도 @Builder와 @NoArgsConstructor는 자주 사용되는 어노테이션들이다.그러나 두 어노테이션을 함께 사용하

velog.io

 

[JPA 프로그래밍] 복합키와 비식별&식별 관계 매핑

해당 글은 김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 을 스터디 하면서 정리하는 글 입니다 !👨‍💻

velog.io

 

[JPA] 식별 관계 & 복합 키

DB에서 두 테이블간에 관계를 나타낼때는 총 2가지로 분류할 수 있다 1. 상대방의 PK를 자신의 PK이자 FK로 사용 = 식별관계 2. 상대방의 PK를 자신의 FK로 사용 = 비식별관계 필수적 비식별 관계(Mandat

cs-ssupport.tistory.com

 

[JPA] 단방향 연관관계와 양방향 연관관계 - 엔티티 매핑(Entity Mapping) - 5

본 내용은 온라인 강의 사이트 인프런의 김영한 님의 강의 내용이 포함되어 있습니다. '자바 ORM 표준 JPA 프로그래밍 - 기본편' 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의 JPA를 처음 접

ittrue.tistory.com