여러 원인이 있을 수 있다.
일단 나의 경우 다른 테이블은 정상적으로 생성되는데 Meeting 테이블이 생성되지 않는 문제였다. 오류는 command 실행 오류이고 쿼리에 문제가 있는 것이었다. 스택오버플로우를 돌아다니다가 한 답변에서 힌트를 얻을 수 있었다.
postgreSQL의 예약어를 사용하여 문제가 발생했다는 답변이다.
보자마자 내 Meeting 테이블에 limit이라는 필드가 떠올랐고 MySQL에 Reserved keyword를 확인했다. (컨트롤 + F로 검색하면 편함)
https://dev.mysql.com/doc/refman/8.0/en/keywords.html
MySQL :: MySQL 8.0 Reference Manual :: 9.3 Keywords and Reserved Words
9.3 Keywords and Reserved Words Keywords are words that have significance in SQL. Certain keywords, such as SELECT, DELETE, or BIGINT, are reserved and require special treatment for use as identifiers such as table and column names. This may also be true
dev.mysql.com
물론 limit은 익히 알고 있는 명령어이다. 그리고 owner라는 필드명도 중복됐다. OWNER는 사용자 생성 등에 쓰이는 명령어이다.
다음부터는 예약어를 필드명으로 사용하지 않도록 조심해야 할듯하다.
이를 해결하는 다른 방법도 있는데,
spring.jpa.properties.hibernate.globally_quoted_identifiers=true
위 옵션을 properties에 추가하는 것이다. 그럼 쿼리문을 틸드(`)로 자동으로 감싸주어서 쿼리문이 문제 없이 잘 실행된다.
그러나 저 옵션이 다른 properties에서 누락된다면 문제가 발생할 수 있으니 주의해야 한다.
'Spring' 카테고리의 다른 글
Spring Security Form Login 사용과 동시성 세션 제어 (0) | 2022.07.17 |
---|---|
Spring Boot에서 AWS S3 PresignedURL 발급받기 (1) | 2022.06.25 |
MockMvc 테스트 시 한글 깨짐 (0) | 2022.05.21 |
웹 스코프 (0) | 2022.04.30 |
빈 스코프 (0) | 2022.04.29 |