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
- 해결 방법
- @Builder 어노테이션을 생성자 레벨에서 사용
- @AllArgsConstructor 추가 사용
- 상황
- @Buider와 @NoArgsConstructor
+ 리팩토링
- TripDailySchedule.java → TripDay.java
- ERD에 맞춰서 수정
+ 리팩토링
- TripDatailSchedule.java → DayDestination.java
- ERD에 맞춰서 수정
+ 리팩토링
(2024.08.04)
- 복합키 설정
- 일정 테이블과 리뷰 사진 테이블에 복합키 설정 추가
- @IdClass 사용
- 연관 관계 매핑 시, @JoinColumns로 변경
- 양방향 연관 관계 매핑 → 단방향 연관 관계 매핑
- 양방향 참조 관계 설정으로 인한 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
'PlayGround > 마실가실 리팩토링' 카테고리의 다른 글
[1년 후 마실가실] Custom Exception (0) | 2024.08.10 |
---|---|
[1년 후 마실가실] Test Code 작성 (0) | 2024.08.05 |
[1년 후 마실가실] REST API 구현 (0) | 2024.08.04 |
[1년 후 마실가실] 환경 설정(로컬 DB 연결 및 JPA 설정) (0) | 2024.07.27 |
[1년 후 마실가실] ERD 수정 (2) | 2024.07.27 |