JPA에서 칼럼명을 'order'로 할 경우 생기는 문제와 기본값을 처리하는 방법
2022. 5. 13. 01:08ㆍWeb/Spring
반응형
velog에서 옮겨온 글 입니다.
원본 날짜: 2022-01-06T13:38:03.117Z
JPA에서 칼럼명을 'order'로 할 경우 생기는 문제
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "
create table course_featured_relation (
...
order tinyint not null,
...
) engine=InnoDB" via JDBC Statement
.
.
.
Caused by: java.sql.SQLSyntaxErrorException: (conn=99720) You have an error in your SQL syntax; ... near 'order tinyint not null,
order
는 MySQL/MariaDB상에서 예약어(reserved word)이므로order tinyint not null
이라는 문장은 SQL 문법ORDER
로 인식됨order
주위에 하이픈(`)을 넣어서`order` tinyint not null
로 실행하면 동작은 함. 다만,order
이 칼럼명으로써 좋은건 아님.
결국 order
를 place_order
, course_order
등 주체가 되는 Entity명을 prefix로 붙여서 칼럼명을 수정함
JPA에서 칼럼의 기본값을 처리하는 방법
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "
create table user (
...
gender char(1) default U not null,
...
) engine=InnoDB" via JDBC Statement
.
.
.
Caused by: java.sql.SQLSyntaxErrorException: (conn=99756) Unknown column 'U' in 'DEFAULT'
- 해당 문제도 JPA에 의해 생성되는 CREATE문에서 기본값
U
를 인식하지 못해서 생긴 오류임 - JPA는
@ColumnDefault("~")
안의 문자열을 그대로 SQL문 안에 넣는듯 하다. 따라서 하이픈(`) 또는 따옴표(')로 감싸주면 해결
@Column(name = "gender", nullable = false)
@ColumnDefault("'U'")
private Gender gender;
참조
반응형