【问题标题】:Hibernate CriteriaBuilder generates invalid queries for attributes written in camelCaseHibernate CriteriaBuilder 为用 camelCase 编写的属性生成无效查询
【发布时间】:2016-09-07 09:11:32
【问题描述】:

我正在使用 Postgres 9.4.1209、Spring Boot 1.4.0 和 Hibernate 5.0.9 并尝试将动态分页查询发送到 Spring Data Repository。每当我的模型类具有以 camelCase 命名的属性时,这都会导致错误。

在Hibernate的QueryTranslatorImpl中生成的HQL是正确的:

select count(payment) from it.my.company.Payment payment where payment.externalId in (?1)

但是生成的 SQL 带有一个额外的下划线,其中我有驼峰式属性名称,因此 externalId 变为 external_id

select count(payment0_.id) as col_0_0_ from payment payment0_ where payment0_.external_id in (?)

不出所料,此查询失败,因为我的数据库中没有 external_id 列。

我直接使用了 Criteria API、Spring Specification API 和 QueryDSL 谓词,每次从 Hibernate 中弹出相同的错误。

作为一种解决方法,我尝试将所有模型类属性重命名为完全小写,这样可以解决错误。但是由于这个错误,我不想将我的所有属性重命名为可读性较差的样式=/

以前有人见过这样的事情吗?我目前正在通过 Hibernate 的 HqlSqlBaseWalker 进行调试,但这不是最易读的代码。

【问题讨论】:

    标签: java postgresql hibernate spring-boot hibernate-criteria


    【解决方案1】:

    我认为问题在于 postgresql 有自己的命名约定。

    例如,列名之类的名称标识符应在lower_case_with_underscores 中。

    外界有很多关于您的问题的分析和讨论。

    不确定是否有“真正的”解决方案,但有良好的最佳实践和方法。

    这里有一些:

    PostgreSQL naming conventions

    Underscores or camelCase in PostgreSQL identifiers, when the programming language uses camelCase?

    Are PostgreSQL column names case-sensitive?

    希望这些答案能有所帮助。我还将进一步寻找问题以找到“真正的”解决方案。

    【讨论】:

    • 重命名我的列以适应命名约定至少比重命名模型属性本身要干净得多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 2017-03-08
    • 2021-12-05
    • 1970-01-01
    相关资源
    最近更新 更多