Hibernate.ddl-auto: create 시 주의사항

박채은·2023년 1월 1일
0

Spring

목록 보기
20/35

주의사항

jpa:
  hibernate:
    ddl-auto: create

Hibernate의 ddl-auto: create을 통해 스키마를 자동으로 생성하도록 설정했다.

Member 엔티티 객체의 필드는 다음과 같다.

private Long memberId;
private String email;
private String name;
private String phone;
private MemberStatus memberStatus;
private LocalDateTime createdAt;
private LocalDateTime modifiedAt;

하지만 생성된 테이블의 속성을 보면 다음과 같다.

즉 테이블 Column의 순서가 엔티티 클래스의 필드와 다르다.
이는 Hibernate가 데이터베이스에 테이블을 생성할 때 컬럼들을 알파벳 순(PK는 앞쪽에 생성)으로 생성하기 때문이다.

그림을 보면, MEMBER_ID는 기본키이기 때문에 가장 앞쪽에 생성되었다.
하지만 CREATED_AT이나 LAST_MODIFIED_AT은 왜 알파벳 순서가 아닐까?라는 생각이 들었다.

이는 Member 엔티티가 Auditable 클래스를 상속받아서 사용했기 때문인 것 같다.

// Member
public class Member extends Auditable

// Auditable
public abstract class Auditable {
    @CreatedDate
    @Column(name = "created_at", updatable = false)
    private LocalDateTime createdAt;

    @LastModifiedDate
    @Column(name = "LAST_MODIFIED_AT")
    private LocalDateTime modifiedAt;
}

해결방법

  • 가장 간단한 방법은 직접 DB에 create 문으로 테이블을 생성하고 Hibernate를 통해서는 테이블의 값을 삽입하는 것이다.

[참고]
https://stackoverflow.com/questions/1298322/wrong-ordering-in-generated-table-in-jpa

0개의 댓글