JPA Entity 작성

S_H_H·2024년 7월 9일
0

Kafka 미니 플젝

목록 보기
2/7

기능을 생각하면서 테이블을 구성해보니 아래 정도로 추려졌다.

  • 사용자와 차량의 관계는 언제든지 변경이 가능하다.

ERD

위 ERD 사진으로 Entity 작성
공통이나 마스터정보에 대해 먼저 작성

BaseEntity

  • 테이블 마다 공통으로 들어가는 정보 기입
  • 시간 정보는 자동 기입 처리
  • 사용자 정보는 처리하지 않음으로 AuditorAware를 통해 동일값 기입 처리
  • @MappedSuperclass 기입 필수
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity {

    @CreatedBy
    @Column(updatable = false)
    private String createdBy;

    @CreatedDate
    @Column(updatable = false)
    private LocalDateTime createdDate;

    @LastModifiedBy
    private String lastModifiedBy;

    @LastModifiedDate
    private LocalDateTime lastModifiedDate;

}

ENUM_TYPE

  • 연료, 제조사, 구동 방식은 ENUM으로 관리
public enum Fuel {
    GASOLINE, DIESEL, LPG
}

public enum Manufacture {
    HYUNDAI, KIA, KGM, GENESIS, BMW, MERCEDES_BENZ, AUDI, CHEVROLET, RENAULT, VOLVO, LEXUS, HONDA, TOYOTA
}

USER_CAR

  • FetchType.LAZY으로 통일
  • default_batch_fetch_size: 100 지정
  • ENUM 사용시 Enumerated(EnumType.STRING) 으로 대참사 방지
@Entity
@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class UserCar extends BaseEntity {

    @Id
    @GeneratedValue
    private Long carId;

    @ManyToOne
    @JoinColumn(name = "userId")
    private UserInfo userInfo;

    private String carNumber;

    private String carModel;

    @Enumerated(EnumType.STRING)
    private Fuel carFuel;

    @Enumerated(EnumType.STRING)
    private TransMission carTransMission;

    @Enumerated(EnumType.STRING)
    private DriveSystem carDriveSystem;

    private Long carMileage;

    @OneToMany(mappedBy = "userCar", fetch = FetchType.LAZY)
    private List<RepairHistory> repairHistory = new ArrayList<>();


    @OneToMany(mappedBy = "userCar", fetch = FetchType.LAZY)
    private List<UserPartServiceDate> userPartServiceDate = new ArrayList<>();

}

다른 Entity Class도 동일하게 만들어 줬습니다.

  jpa:
    hibernate:
      ddl-auto: update

위 옵션을 통해 테이블 생성 확인 했습니다.

profile
LEVEL UP

0개의 댓글