프로그래밍/java, spring

JPA auto-ddl update는 컬럼 속성을 수정하지 않는다.

브래드 킴 2022. 12. 14. 12:51
728x90

현재 author 테이블은 위와 같은 데이터 타입과 lenth를 가지고 있다. password length가 너무 길어 100으로 줄이고자 하는데, 아래와 같이 length를 100으로 바꿔 서버를 재기동하였는데도 db alter가 제대로 작동하지 않는다. auto-ddl은 update로 설정돼 있는 상황. 이유는 ddl-auto에 update 설정을해도 jpa에서 컬럼 속성은 변경이 되지 않기 때문이다.

@Setter
@Getter
@Entity
public class Author {

    @Id @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(length = 50)
    private String name;

    @Column(length = 50, unique = true)
    private String email;

    @Column(length = 100)
    private String password;

    @Column(length = 10)
    private Role role;

 

application.yml은 아래와 같다.

spring:
  jpa:
    database: mysql
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
    show_sql: true
    format_sql: true
    generate-ddl: true
    hibernate:
      ddl-auto: update

 

위에서 보는 바와 같이 여타ORM에 비해 JPA의 auto ddl 기능은 다소 제한적임을 알수가 있다.

 

결론

1.ddl-auto에 update 설정을해도 jpa에서 컬럼의 속성은 변경이 안된다.

 

2.컬럼자체를 신규 추가하는 것은 update모드로 가능하다.

 

3.ddl-auto: create 모드로 설정하면 길이변경이 반영되기는하나, 테이블자체를 재생성하게 되는 모드.

 

4.jpa관련 ddl-auto 관련한 이슈사항

  1)일반적으로 운영환경에서는 create, update모드를 사용하면 안되고 validate, none을 추천하고 있다. create모드가 위험하다는 것은 당연한 것이고, update모드도 추천하지 않고 있고, 그 뿐만 아니라 여타 orm에 비해 기능 자체의 제한이 있는 것으로 보인다.

 

  2)이는 hibernate의 기능이 너무나 일반화 및 추상화 되어 있기에 이를 제한적으로 사용하길 권장하는 것이다. 즉, hibernate가 표현할수 있는 스키마에 비해 DBMS의 기능은 너무나 다양하기에 되도록이면 DBMS기능을 적극 활용하길 권장하는 것.

 

 

 

728x90