[JPA] hibernate dialect ORACLE11g 설정

eugene.yi·2022년 9월 28일
0
post-custom-banner

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로 설정하면 된다.

post-custom-banner

0개의 댓글