Hibernate: Creación / actualización automática de tablas db basadas en clases de entidad

Tengo la siguiente clase de entidad (en 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 } 

y mi persistence.xml:

    org.hibernate.ejb.HibernatePersistence           net.interaxia.icarus.data.models.ServerNode   

y el guion:

 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() 

la base de datos Icarus existe, pero actualmente no tiene tablas. Me gustaría que Hibernate cree y / o actualice automáticamente las tablas basadas en las clases de entidad. ¿Cómo podría lograr esto?

No sé si dejar la hibernate en el frente hace la diferencia.

La referencia sugiere que debe ser hibernate.hbm2ddl.auto

Un valor de create creará sus tablas en la creación de sessionFactory y las dejará intactas.

Un valor de create-drop creará sus tablas, y luego las soltará cuando cierre sessionFactory.

Tal vez debería establecer la anotación javax.persistence.Table explícitamente?

Espero que esto ayude.

Puede intentar cambiar esta línea en su persistence.xml de

  

a:

  

Se supone que esto debe mantener el esquema para seguir cualquier cambio que realice en el Modelo cada vez que ejecute la aplicación.

Tengo esto de JavaRanch

A veces, dependiendo de cómo se configure la configuración, la forma larga y la forma abreviada de la etiqueta de propiedad también pueden marcar la diferencia.

por ejemplo, si lo tiene como:

  

intente cambiarlo a:

 create 

En mi caso, la tabla no se creó por primera vez sin la última propiedad enumerada a continuación:

         

utilizó la base de datos en memoria H2 de Wildfly

Hay un detalle muy importante que puede posiblemente evitar que su hibernación genere tablas (suponiendo que ya ha configurado hibernate.hbm2ddl.auto ). ¡También necesitarás la anotación @Table !

 @Entity @Table(name = "test_entity") public class TestEntity { } 

Ya ha ayudado en mi caso al menos 3 veces, todavía no puedo recordarlo;)

PD. Lea los documentos de hibernación: en la mayoría de los casos, probablemente no desee establecer hibernate.hbm2ddl.auto para create-drop , ya que borrará sus tablas después de detener la aplicación.

En el archivo applicationContext.xml:

           update org.hibernate.dialect.MySQL5Dialect    

Hibernate hbm2ddl.auto :

Automáticamente valida o exporta el esquema DDL a la base de datos cuando se crea SessionFactory. Con create-drop, el esquema de la base de datos se eliminará cuando SessionFactory se cierre explícitamente. por ejemplo, validar | actualización | crear | crear-soltar

Por favor, consulte el enlace para más detalles.