Ich habe die folgende Entitätsklasse (in Groovy):
import javax.persistence.Entity
import javax.persistence.Id
import javax.persistence.GeneratedValue
import javax.persistence.GenerationType
@Entity
public class ServerNode {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long id
String firstName
String lastName
}
und meine persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
<persistence-unit name="NewPersistenceUnit">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/Icarus"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.connection.password" value=""/>
<property name="hibernate.archive.autodetection" value="class"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hbm2ddl.auto" value="create"/>
</properties>
<class>net.interaxia.icarus.data.models.ServerNode</class>
</persistence-unit>
</persistence>
und das Skript:
import javax.persistence.EntityManager
import javax.persistence.EntityManagerFactory
import javax.persistence.Persistence
import net.interaxia.icarus.data.models.ServerNode
def factory = Persistence.createEntityManagerFactory("NewPersistenceUnit")
def manager = factory.createEntityManager()
manager.getTransaction().begin()
manager.persist new ServerNode(firstName: "Test", lastName: "Server")
manager.getTransaction().commit()
Die Datenbank Icarus existiert, hat aber derzeit keine Tabellen. Ich möchte, dass Hibernate die Tabellen basierend auf den Entitätsklassen automatisch erstellt und / oder aktualisiert. Wie würde ich das erreichen?
Sie können versuchen, diese Zeile in Ihrer persistence.xml von zu ändern
zu:
Dadurch soll das Schema beibehalten werden, damit alle Änderungen, die Sie am Modell vornehmen, bei jeder Ausführung der App berücksichtigt werden.
Habe das von JavaRanch bekommen
quelle
Abhängig von der Einstellung der Konfiguration können manchmal auch die Langform und die Kurzform des Eigenschaftstags den Unterschied ausmachen.
zB wenn du es magst wie:
Versuchen Sie es zu ändern in:
quelle
In meinem Fall wurde die Tabelle nicht zum ersten Mal ohne die unten aufgeführte letzte Eigenschaft erstellt:
verwendete Wildflys In-Memory-H2-Datenbank
quelle
Es gibt ein sehr wichtiges Detail, das möglicherweise verhindern kann, dass Ihr Ruhezustand Tabellen generiert (vorausgesetzt, Sie haben die bereits festgelegt
hibernate.hbm2ddl.auto
). Sie benötigen auch die@Table
Anmerkung!Es hat in meinem Fall schon mindestens 3 mal geholfen - kann mich immer noch nicht daran erinnern;)
PS. Lesen Sie die Hibernate - docs - in den meisten Fällen werden Sie wahrscheinlich nicht festlegen möchten
hibernate.hbm2ddl.auto
zucreate-drop
, weil es Ihre Tabellen löscht , nachdem die App zu stoppen.quelle
In der Datei applicationContext.xml:
quelle
Zur Unterstützung der Antwort von @ thorinkor würde ich meine Antwort erweitern, um nicht nur die Annotation @Table (name = "table_name") für die Entität zu verwenden, sondern auch jede untergeordnete Variable der Entitätsklasse mit @Column (name = "col_name") zu kommentieren. Dies führt zu einer nahtlosen Aktualisierung der Tabelle unterwegs.
Für diejenigen, die nach einer Java-Klassen-basierten Ruhezustandskonfiguration suchen, gilt die Regel auch in Java-basierten Konfigurationen (NewHibernateUtil). Hoffe es hilft jemand anderem.
quelle