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:
<?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>
y el guión:
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 creara y / o actualice automáticamente las tablas en función de las clases de entidad. ¿Cómo lograría esto?
Puede intentar cambiar esta línea en su persistence.xml de
a:
Se supone que esto mantiene el esquema para seguir cualquier cambio que realice en el modelo cada vez que ejecuta la aplicación.
Obtuve esto de JavaRanch
fuente
A veces, dependiendo de cómo se establezca la configuración, la forma larga y la forma corta de la etiqueta de propiedad también pueden marcar la diferencia.
por ejemplo, si lo tiene como:
intente cambiarlo a:
fuente
En mi caso, la tabla no se creó por primera vez sin la última propiedad que se enumera a continuación:
utilizó la base de datos H2 en memoria de Wildfly
fuente
Hay un detalle muy importante, que posiblemente puede evitar que su hibernación genere tablas (asumiendo que ya ha configurado
hibernate.hbm2ddl.auto
). ¡También necesitará la@Table
anotación!Ya me ha ayudado en mi caso al menos 3 veces, todavía no puedo recordarlo;)
PD. Lea la documentación de Hibernate - en la mayoría de los casos Es probable que no tendrá que ajustar
hibernate.hbm2ddl.auto
acreate-drop
, ya que elimina Sus tablas después de detener la aplicación.fuente
En el archivo applicationContext.xml:
fuente
En apoyo a la respuesta de @ thorinkor, ampliaría mi respuesta para usar no solo la anotación @Table (name = "table_name") para la entidad, sino que también cada variable secundaria de la clase de entidad debe anotarse con @Column (name = "col_name"). Esto se traduce en una actualización perfecta de la mesa sobre la marcha.
Para aquellos que buscan una configuración de hibernación basada en clases Java, la regla también se aplica en configuraciones basadas en Java (NewHibernateUtil). Espero que ayude a alguien más.
fuente