我使用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带有一个额外的下划线,其中我有camelCase属性名称,因此 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 Predicates,并且每次都从Hibernate中弹出相同的错误。
作为一种解决方法,我尝试将所有模型类属性重命名为完全小写,从而处理错误。但我不想将我的所有属性重命名为不太可读的样式,因为这个错误= /
以前有人见过这样的事吗?我目前正在通过Hibernate的HqlSqlBaseWalker调试方式,但这不是最易读的代码。
答案 0 :(得分:1)
我认为问题在于postgresql有自己的命名约定。
例如列名称之类的名称标识符应位于lower_case_with_underscores
。
关于你的问题,外面有许多激烈的讨论和讨论。
不确定是否存在“真实”的解决方案,但是有一个很好的最佳实践以及如何实现。
以下是一些:
Underscores or camelCase in PostgreSQL identifiers, when the programming language uses camelCase?
Are PostgreSQL column names case-sensitive?
希望这些答案有所帮助。我还将进一步研究找到“真正的”解决方案的问题。