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:
Anwendung.java:
%Vor%Datum.java:
%Vor%DatumRepository.java:
%Vor%Anwendung.xml:
%Vor%pom.xml:
%Vor%(edit) Ausgabe + Ausnahme:
%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.
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.
Ich habe es herausgefunden.
Verwende DefaultNamingStrategy
und backticks in der @Column Annotation.
und
%Vor%Tags und Links java hibernate spring spring-boot