Ich entwickle eine Website mit Spring + JPA + Hibernate. In der Persistenzkonfiguration (JPA + Hibernate) setze ich das generateDdl-Attribut des HibernateJpaVendorAdapter auf true, und tatsächlich erstellen neue Entitäten die neue Tabelle in der DB korrekt.
Sobald die Tabelle erstellt wurde, erwarte ich, dass HibergenateJpaVendorAdapter die Tabelle ändert und die Spalte ebenfalls hinzufügt, wenn ich der Entität ein Attribut hinzufüge. Dies geschieht nicht und es ist merkwürdig, weil in der Java-AbstractTextDataMap-Methode die folgenden Anweisungen stehen: "Legen Sie fest, ob DDL generiert werden soll, nachdem die EntityManagerFactory initialisiert wurde, indem Sie / update alle relevanten Tabellen erstellen."
JPA + Hibernate-Konfiguration:
%Vor%persistence.xml:
%Vor%Mache ich etwas falsch?
Sie können eine detailliertere Kontrolle über die DDL-Generierung erhalten, indem Sie eine geeignete Hibernate-spezifische Eigenschaft direkt festlegen:
%Vor% Alternativ können Sie create-drop
anstelle von update
verwenden, da update
in einigen Fällen Probleme verursachen kann. Beachten Sie jedoch, dass die automatische DDL-Aktualisierung nicht für den produktiven Einsatz gedacht ist.
Alternativ können Sie mit jpaPropertyMap
auch die gleichen Eigenschaften ausdrücken:
Vielleicht zu spät, aber heute hatte ich das gleiche Problem, als ich einige Tests für eine Legacy-App schrieb.
Das Problem tritt nicht nur auf, wenn Sie generateDdl
-Eigenschaft verwenden, sondern auch HSQL
wird verwendet.
Um es zu lösen, änderte ich die Datenbank von HSQL
zu H2
und die Datenquelle von org.springframework.jdbc.datasource.DriverManagerDataSource
zu org.apache.commons.dbcp.BasicDataSource
.
Die Datei spring-context.xml sieht folgendermaßen aus:
%Vor%Die Datei persistence.xml sieht folgendermaßen aus:
%Vor%Ich hoffe, es hilft.