gpt4 book ai didi

java - 我的 jpaRepository.findAll() 中的可分页参数返回 SqlSyntaxErrorException

转载 作者:行者123 更新时间:2023-12-02 02:25:26 25 4
gpt4 key购买 nike

我正在使用 JpaRepositories,我想合并 Specification , PageableSort参数给我的findAll()方法。

不幸的是,当我执行代码时出现此异常(我使用的是 Oracle 数据库):

Caused by: java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended
[...]
Caused by: org.hibernate.exception.SQLGrammarException: could not extract ResultSet

这是我的服务方法:

public Page<Demande> findAllByAdherentWithPagination(Long idAdherent, int page, int perPage){
Specification<Demande> spec = DemandeSpecification.hasAdherent(idAdherent);
//page - 1 because pages starts at 0
PageRequest pr = PageRequest.of(page - 1, perPage, sortByCreationDate());

// -- The code stops at the following line --
Page<Demande> demandes = repository.findAll(spec, pr);

return demandes;
}

public Sort sortByCreationDate(){
// "creationDate" is a property of the class Demande
return new Sort(Sort.Direction.DESC, "creationDate");
}

我该如何使用 PageRequest参数如果不是这样的?

repository变量是一个简单的 JpaRepository,如下所示:

@Repository
public interface DemandeRepository extends ApiRepository<DemandeEntity> {
}

@NoRepositoryBean
public interface ApiRepository<E> extends JpaRepository<E, Long>, JpaSpecificationExecutor<E> {
}

如果您觉得有用,这是我的规范方法:

public static Specification<Demande> hasAdherent(Long idAdherent) {
return (root, query, criteriaBuilder) -> {
return criteriaBuilder.equal(root.get(Demande_.idAdherent), idAdherent);
};
}

在我添加 PageRequest 之前,代码可以正常工作。当我调用findAll()时像这样:

public List<Demande> findAllByAdherentWithPagination(Long idAdherent, int page, int perPage) throws ApiException {
Specification<Demande> spec = DemandeSpecification.hasAdherent(idAdherent);
List<Demande> demandes = repository.findAll(spec, sortByCreationDate());

// [...] -> Pagination "homemade" using demandes.subList(start, end)

return demandes;
}

最佳答案

事实证明,我从未在我的 application.properties 中声明我的 Oracle 数据库的版本。

所以 SQL 看起来像这样:

SELECT [...] FROM [...] WHERE [...] FECTH FIRST 10 ROWS;

但是这个语法只出现在Oracle 12c中,我的数据库是Oracle 10g。为了解决这个问题,我将其添加到 application.properties 文件中:

spring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect

关于java - 我的 jpaRepository.findAll() 中的可分页参数返回 SqlSyntaxErrorException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57256937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com