HQL 生成 TOP() 子句到 Postgres 数据库

Posted

技术标签:

【中文标题】HQL 生成 TOP() 子句到 Postgres 数据库【英文标题】:HQL generate TOP() clause to Postgres database 【发布时间】:2014-09-15 19:10:09 【问题描述】:

我有一个与 oracle、sqlserver 和 postgres 兼容的软件“jsf + spring + jpa”。但是,目前在分页时出现了问题。为 Postgres 数据库生成的查询会创建一个与 Postgress 不兼容的 TOP() 子句。我想知道如何生成 LIMMIT 而不是 TOP。

@Query("SELECT new br.com.governa.admin.comum.entidade.visao.PessoaFisicaVisao("
            + "pessoaFisica.id, "
            + "pessoaFisica.nome, "
            + "pessoaFisica.cpf, "
            + "pessoaFisica.dataNascimento, "
            + "pessoaFisica.nomeMae) "
            + "FROM PessoaFisica pessoaFisica " 
            + "WHERE upper(pessoaFisica.nome) like %:nome% " 
            + "AND upper(pessoaFisica.cpf) like %:cpf% "
            + "AND upper(pessoaFisica.rg) like %:rg% " 
            + "AND (pessoaFisica.dataNascimento = :dataNascimento OR :dataNascimentoStr = null) "
            + "AND upper(pessoaFisica.nomeMae) like %:nomeMae% ")
    Page<PessoaFisicaVisao> findPessoaFisicaVisaoPaginado(
            @Param("nome") String nome, @Param("cpf") String cpf,
            @Param("rg") String rg, @Param("dataNascimento") Date dataNascimento,
            @Param("dataNascimentoStr") String dataNascimentoStr, @Param("nomeMae") String nomeMAe, 
            Pageable pageable)

Spring Query 注释正在生成此 JPQL

select
    TOP(10) -- is not recognized PostGres SQL
    pessoafisi0_.id as col_0_0_,
    pessoafisi0_1_.nome as col_1_0_,
    pessoafisi0_.cpf as col_2_0_,
    pessoafisi0_.data_nascimento as col_3_0_,
    pessoafisi0_.nome_mae as col_4_0_ 
from
    admin.PESSOA_FISICA pessoafisi0_ 
inner join
    admin.PESSOA pessoafisi0_1_ 
        on pessoafisi0_.id=pessoafisi0_1_.id 
where
    (
        upper(pessoafisi0_1_.nome) like ?
    ) 
    and (
        upper(pessoafisi0_.cpf) like ?
    ) 
    and (
        upper(pessoafisi0_.rg) like ?
    ) 
    and (
        pessoafisi0_.data_nascimento=? 
        or ? is null
    ) 
    and (
        upper(pessoafisi0_.nome_mae) like ?
    ) 
order by
    pessoafisi0_1_.nome,
    pessoafisi0_.cpf asc

我正在使用: 休眠 4.2 休眠-jpa 2.1 春季 4.0.5

【问题讨论】:

【参考方案1】:

我正在为 SQLServer 编译代码并在 POSTGRES 中运行服务器。对不起。

【讨论】:

以上是关于HQL 生成 TOP() 子句到 Postgres 数据库的主要内容,如果未能解决你的问题,请参考以下文章

JPQL 中的 HQL 'with' 子句

HQL 错误:with 子句引用了两个不同的 from 子句元素

HQL,我可以参数化 FROM 子句吗?

LEFT JOIN 中带有子句的 Hql 错误

将列表传递给 HQL 或 SQL 中的 IN 子句?

sql Hive HQL子句运行顺序及执行计划,别名