현재 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기능을 적극 활용하길 권장하는 것.
'프로그래밍 > java, spring' 카테고리의 다른 글
서블릿방식과 spring MVC 컨트롤러의 json처리 비교 (0) | 2022.12.26 |
---|---|
서블릿의 필요성 (0) | 2022.12.25 |
java에서 json파일 parsing (0) | 2022.12.19 |
추상클래스와 익명클래스 (0) | 2022.12.03 |
재귀함수의 활용 (0) | 2022.11.27 |