Eu tenho a seguinte classe de entidade (em 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
}
e meu 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>
e o roteiro:
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()
o banco de dados Icarus existe, mas atualmente não tem tabelas. Gostaria que o Hibernate criasse e / ou atualizasse automaticamente as tabelas com base nas classes de entidade. Como eu faria isso?
Você pode tentar mudar esta linha em seu persistence.xml de
para:
Isso deve manter o esquema para seguir todas as alterações feitas no modelo sempre que executar o aplicativo.
Peguei isso de JavaRanch
fonte
Às vezes, dependendo de como a configuração é definida, o formato longo e o formato curto da tag de propriedade também podem fazer a diferença.
por exemplo, se você tem como:
tente mudar para:
fonte
No meu caso, a tabela não foi criada pela primeira vez sem a última propriedade listada abaixo:
usou o banco de dados H2 em memória do Wildfly
fonte
Há um detalhe muito importante, que pode impedir que seu hibernate gere tabelas (supondo que você já tenha configurado o
hibernate.hbm2ddl.auto
). Você também precisará da@Table
anotação!Já ajudou no meu caso pelo menos 3 vezes - ainda não me lembro;)
PS. Leia os documentos do hibernate - na maioria dos casos, você provavelmente não desejará definir
hibernate.hbm2ddl.auto
comocreate-drop
, porque ele exclui Suas tabelas após interromper o aplicativo.fonte
No arquivo applicationContext.xml:
fonte
Em apoio à resposta de @torinkor, eu estenderia minha resposta para usar não apenas a anotação @Table (name = "table_name") para entidade, mas também todas as variáveis filho da classe de entidade devem ser anotadas com @Column (name = "col_name"). Isso resulta em uma atualização contínua para a mesa em movimento.
Para aqueles que procuram uma configuração de hibernate baseada em classe Java, a regra também se aplica a configurações baseadas em java (NewHibernateUtil). Espero que isso ajude mais alguém.
fonte