Spring data + hibernate verwendet den falschen Spaltennamen

8

Wenn Sie Spring Data + Hibernate verwenden, wird Hibernate so konfiguriert, dass das Schema automatisch erstellt wird. Wenn jedoch eine Ausnahme ausgelöst wird (siehe unten).

Es sieht so aus, als ob der während der automatischen Schemaerstellung verwendete Spaltenname anders ist als der Spaltenname für die Abfrage.

Wenn ich LocalSessionFactoryBean so konfiguriere, dass eine Benennungsstrategie verwendet wird, verschwindet das Problem und der Test funktioniert.

Ist das ein Fehler? oder verstehe ich etwas falsch?

Das Setup ist unten.

[Bearbeiten] Wie im Protokoll unten ist die Nachricht ERROR: column datum0_.datum_id does not exist vorhanden. Die Spalte heißt jedoch tatsächlich datumId , wie aus dem protokollierten SQL ersichtlich ist:

%Vor%

Anwendung.java:

%Vor%

Datum.java:

%Vor%

DatumRepository.java:

%Vor%

Anwendung.xml:

%Vor%

pom.xml:

%Vor%

(edit) Ausgabe + Ausnahme:

%Vor%     
Colin Breame 03.02.2015, 12:52
quelle

3 Antworten

6
%Vor%

So wenden Sie das folgende an:

Ich habe das Problem in ImprovedNamingStrategy gefunden, wenn Sie es ohne Details lösen wollen, verwenden Sie DefaultNamingStrategy statt dessen ImprovedNamingStrategy wie unten in der Eigenschaftendatei

%Vor%

Details: Es gibt 2 Methoden in der NamingStrategy-Schnittstelle propertyToColumnName und columnName, die zuerst aufgerufen wird, wenn Sie keinen Namen in @Column angegeben haben und die zweite, wenn Sie den Namen in @Column angeben.

in ImprovedNamingStrategy ändern beide den Namen von camel in _ format, während es in DefaultNamingStrategy den Namen zurückgibt, wie es in der 2. Methode ist, was aus meiner Sicht das richtige Verhalten ist.

    
Bassem Reda Zohdy 10.03.2015 18:29
quelle
5

Spring Boot verwendet standardmäßig org.springframework.boot.orm.jpa.SpringNamingStrategy .

  

Hibernate NamingStrategy, die den von Spring empfohlenen Namenskonventionen folgt.

Diese Benennungsstrategie verwendet nur den Feldnamen und leitet einen nur darauf basierenden Spaltennamen ab, wobei camel case durch Unterstrich ersetzt wird. Sie haben die Ausnahme nicht gepostet, aber basierend auf diesem Hibernate wahrscheinlich nach datum_id -Spalte abgefragt.

Problem beim Spring-Boot-Projekt

    
Predrag Maric 03.02.2015 13:07
quelle
1

Ich habe es herausgefunden.

Verwende DefaultNamingStrategy und backticks in der @Column Annotation.

%Vor%

und

%Vor%     
postalservice14 06.07.2016 15:11
quelle

Tags und Links