2016-09-07 1 views
0

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.

Antwort

1

Ich denke, das Problem ist, dass Postgresql seine eigenen Namenskonventionen hat.

Zum Beispiel sollte Namen Bezeichner wie Spaltennamen in lower_case_with_underscores sein.

Es gibt viele Ansers und Diskussionen im Hinblick auf Ihr Problem.

Nicht sicher, ob es eine "echte" Lösung gibt, aber es gibt gute Best Practices und Anleitungen.

Hier sind einige:

PostgreSQL naming conventions

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

Are PostgreSQL column names case-sensitive?

Hoffnung einige dieser Antworten hilft. Ich werde auch weiter nachfragen, um die "echte" Lösung zu finden.

+0

Das Umbenennen meiner Spalten, um der Namenskonvention zu entsprechen, ist zumindest eine wesentlich sauberere Lösung als das Umbenennen der Modellattribute selbst. –

Verwandte Themen