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.