Wie zu verwenden Hibernate SchemaUpdate-Klasse mit einer JPA persistence.xml?
Habe ich eine main-Methode mit SchemaUpdate auf dem display auf der Konsole, was Tabellen zu ändern/zu erstellen und es funktioniert gut in meiner Hibernate-Projekt:
public static void main(String[] args) throws IOException {
//first we prepare the configuration
Properties hibProps = new Properties();
hibProps.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("jbbconfigs.properties"));
Configuration cfg = new AnnotationConfiguration();
cfg.configure("/hibernate.cfg.xml").addProperties(hibProps);
//We create the SchemaUpdate thanks to the configs
SchemaUpdate schemaUpdate = new SchemaUpdate(cfg);
//The update is executed in script mode only
schemaUpdate.execute(true, false);
...
Ich würde gerne die Wiederverwendung dieser code in ein JPA-Projekt, ohne hibernate.cfg.xml Datei (und keine .Eigenschaften-Datei), aber eine persistence.xml Datei (erkannt im META-INF Verzeichnis wie angegeben durch die JPA spec).
Habe ich versucht, dieses viel zu einfache Anpassung,
Configuration cfg = new AnnotationConfiguration();
cfg.configure();
aber es scheiterte mit der Ausnahme.
Exception in thread "main" org.hibernate.HibernateException: /hibernate.cfg.xml not found
Hat jemand das getan?
Danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kariem ist auf der richtigen Spur, aber lassen Sie mich versuchen zu klären.
Nehmen wir an, Sie haben einen Vanille-JPA-standard-Konfiguration mit nichts Hibernate-spezifisch, außer für die Hibernate-jars im classpath. Wenn Sie in der J2SE-bootstrap-Modus, die Sie bereits haben einige code, der sieht so etwas, entweder in Java oder Spring-Konfiguration, etc.:
Laufen SchemaUpdate, verwenden Sie einfach diese statt:
Ich bin mir nicht sicher, wie dies funktionieren würde in einem container-Umgebung, sondern in einer einfachen J2SE oder Feder Typ der Konfiguration, das ist alles dort ist zu ihm.
Sollten Sie verwenden Ejb3Configuration statt der normalen Konfiguration. Finden Sie die entity-manager-Dokumentation, die am Ende des bootstrapping Abschnitt in der hibernate-Dokumentation.
(kopiert aus der oben genannten Quelle mit geringfügigen Anpassungen)
Wie Sie sehen können, können Sie mischen eine Menge von verschiedenen Arten von Konfigurationen.
Wenn es nur für die schema-update-Teil, Sie können nur eine Eigenschaft festlegen, die in Ihrem persistence.xml:
hibernate.hbm2ddl.auto
:Sehen hier für ein paar mehr Hinweise.
Vielen Dank Peter, deine Antwort hat gut funktioniert.
Hier ist der vollständige code unseres SchemaUpdater Klasse: