Spring boot 2.7.4
java 8
Gradle 6.8.3
Oracle 11g
JPA - ORACLE DB를 연동해 개발 중
단순한 find all Desc 페이징 쿼리가 조회되지 않고 오류가 났다.
2022-09-28 14:19:53.859 WARN 30108 --- [io-8080-exec-10] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 933, SQLState: 42000
2022-09-28 14:19:53.859 ERROR 30108 --- [io-8080-exec-10] o.h.engine.jdbc.spi.SqlExceptionHelper : ORA-00933: SQL 명령어가 올바르게 종료되지 않았습니다
spring.jpa.show-sql=true 설정으로 찍힌 sql을 확인해보니,
select user0_.id as id1_0_, user0_.created_date as created_date2_0_, ... from user_info user0_ order by user0_.id desc fetch first ? rows only
Oracle 12c부터 제공되는 fetch first n rows only 구문이 사용되었다.
이는 Hibernate Dialect를 설정하지 않아서 난 오류였다.
JPA에 사용하는 DBMS를 알려주는 방법이다.
application.properties 파일에 아래 코드를 추가하여 해결했다.
spring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect
select * from (select user0_.id as id1_0_, ... from user_info user0_ order by user0_.id DESC ) where rownum <= ?
※ 참고 : 11g 버전은 Oracle10gDialect로 설정하면 된다.