gpt4 book ai didi

java - Hibernate CriteriaBuilder 为以驼峰命名法编写的属性生成无效查询

转载 作者:行者123 更新时间:2023-12-01 09:31:33 24 4
gpt4 key购买 nike

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

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 规范 API 和 QueryDSL Predicates,并且每次都从 Hibernate 中弹出相同的错误。

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

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

最佳答案

我认为问题在于 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?

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

关于java - Hibernate CriteriaBuilder 为以驼峰命名法编写的属性生成无效查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39365769/

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