Spring Boot 2.0与oracle的分页无法正常工作

Toa*_*Dao 4 java oracle rest jpa-2.0 spring-boot

我目前从Spring Boot 1.4 - > 2.0迁移,然后我遇到了一个问题:

@GetMapping("/sample")
public Page<SampleDTO> doSomethings(@RequestParam("name") String name, Pageable pageable)
Run Code Online (Sandbox Code Playgroud)

我的存储库:

public interface SampleRepository extends JpaRepository<Sample, String>, QuerydslPredicateExecutor<Sample> {
        Page<Sample> findByNameContainingIgnoreCase(String name, Pageable pageable);
Run Code Online (Sandbox Code Playgroud)

所以,当我调用API时:

http://localhost:8088/api/v1/sample?name=abc&page=0&size=10&sort=name,asc
Run Code Online (Sandbox Code Playgroud)

我注意到JPA已翻译成此查询:

Spring Boot 1.5

select * 
from ( select row_.*, rownum rownum_ 
from ( select ... from sample sample0_ where upper(sample0_.name) like upper(?) 
        order by sample0_.name asc ) 
row_ where rownum <= ?) where rownum_ > ?
Run Code Online (Sandbox Code Playgroud)

Spring Boot 2.0

select ...
from sample sample0_ 
where upper(sample0_.name) like upper(?) 
order by sample0_.name asc fetch first ? rows only

-->>> 2018-08-14 14:45:04 ERROR o.h.e.jdbc.spi.SqlExceptionHelper - ORA-00933: SQL command not properly ended
Run Code Online (Sandbox Code Playgroud)

哪个不适合Oracle查询.这是一个错误吗?

Toa*_*Dao 8

所以在Spring Boot 1.5中,只使用没有指定任何方言一切正常工作:

spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
Run Code Online (Sandbox Code Playgroud)

但是当我迁移到Spring Boot 2.0时,方言必须定义为:

spring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect
Run Code Online (Sandbox Code Playgroud)

否则你会看到消息:

2018-08-14 17:11:02 WARN  c.z.hikari.util.DriverDataSource - Registered driver with driverClassName=oracle.jdbc.driver.OracleDriver was not found, trying direct instantiation.
Run Code Online (Sandbox Code Playgroud)

感谢@Simon Martinelli的评论.它真的帮助我发现我的错误:)