Ich benutze Postgres 9.4.1209, Spring Boot 1.4.0 und Hibernate 5.0.9 und versuche eine dynamische paginierte Abfrage an ein Spring Data Repository zu senden. Dies führt zu einem Fehler, wenn meine Modellklasse ein Attribut hat, das in camelCase benannt ist.Hibernate CriteriaBuilder erzeugt ungültige Abfragen für in camelCase geschriebene Attribute
Die QueryTranslatorImpl des erzeugten HQL in Hibernate ist korrekt:
select count(payment) from it.my.company.Payment payment where payment.externalId in (?1)
Aber die generierten SQL wird mit einem zusätzlichen Unterstrich, wo ich camelcase Attributnamen haben, so externalId
select count(payment0_.id) as col_0_0_ from payment payment0_ where payment0_.external_id in (?)
EXTERNAL_ID wird
Es überrascht nicht, schlägt diese Abfrage fehl, da keine Spalte external_id ist in meiner Datenbank.
Ich habe sowohl die Criteria-API direkt, die Spring Specification-API und QueryDSL-Prädikate verwendet, als auch den gleichen Fehler, der jedes Mal aus Hibernate herauskommt.
Um dieses Problem zu umgehen, habe ich versucht, alle meine Modellklassenattribute vollständig in Kleinbuchstaben umzubenennen, wodurch der Fehler behoben wird. Aber ich möchte nicht alle meine Attribute zu einem weniger lesbaren Stil wegen dieses Fehlers umbenennen =/
Hat jemand so etwas schon einmal gesehen? Ich debugge gerade meinen Weg durch Hibernate HqlSqlBaseWalker, aber das ist nicht der lesbarste Teil des Codes.
Das Umbenennen meiner Spalten, um der Namenskonvention zu entsprechen, ist zumindest eine wesentlich sauberere Lösung als das Umbenennen der Modellattribute selbst. –