다음 엔터티 클래스 (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
}
내 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>
및 스크립트 :
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()
Icarus 데이터베이스 가 있지만 현재 테이블이 없습니다. Hibernate가 엔티티 클래스를 기반으로 테이블을 자동으로 생성 및 / 또는 업데이트하기를 바랍니다. 어떻게해야합니까?
답변
hibernate
앞을 떠나는 것이 효과가 있는지 모르겠습니다 .
참조는 그것이 있어야 제안hibernate.hbm2ddl.auto
값은 create
sessionFactory 생성시 테이블을 생성하고 그대로 둡니다.
값은 create-drop
테이블을 만든 다음 sessionFactory를 닫을 때 삭제합니다.
javax.persistence.Table
주석을 명시 적으로 설정해야 할까요?
도움이 되었기를 바랍니다.
답변
persistence.xml에서이 줄을
<property name="hbm2ddl.auto" value="create"/>
에:
<property name="hibernate.hbm2ddl.auto" value="update"/>
이것은 앱을 실행할 때마다 모델에 대한 변경 사항을 따르도록 스키마를 유지하기위한 것입니다.
답변
때로는 구성 설정 방법에 따라 속성 태그의 긴 형식과 짧은 형식도 차이를 만들 수 있습니다.
예를 들어 다음과 같은 경우 :
<property name="hibernate.hbm2ddl.auto" value="create"/>
다음으로 변경하십시오.
<property name="hibernate.hbm2ddl.auto">create</property>
답변
제 경우에는 아래에 나열된 마지막 속성없이 처음으로 테이블이 생성되지 않았습니다.
<properties>
<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-drop"/>
<!-- without below table was not created -->
<property name="javax.persistence.schema-generation.database.action" value="drop-and-create" />
</properties>
Wildfly의 인 메모리 H2 데이터베이스 사용
답변
테이블 생성에서 최대 절전 모드를 중지 할 수있는 매우 중요한 세부 정보가 있습니다 (이미를 설정했다고 가정 hibernate.hbm2ddl.auto
). @Table
주석 도 필요합니다 !
@Entity
@Table(name = "test_entity")
public class TestEntity {
}
그것은 이미 제 경우에 적어도 3 번 도움이되었습니다-여전히 그것을 기억할 수 없습니다.)
추신. 최대 절전 모드 문서를 읽기 – 대부분의 경우에 당신은 아마 설정하지 않습니다 hibernate.hbm2ddl.auto
에 create-drop
이 응용 프로그램을 중지 한 후 테이블을 삭제하기 때문에.
답변
applicationContext.xml 파일에서 :
<bean id="entityManagerFactoryBean" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- This makes /META-INF/persistence.xml is no longer necessary -->
<property name="packagesToScan" value="com.howtodoinjava.demo.model" />
<!-- JpaVendorAdapter implementation for Hibernate EntityManager.
Exposes Hibernate's persistence provider and EntityManager extension interface -->
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
</props>
</property>
</bean>
답변
@thorinkor의 답변을 지원하기 위해 엔터티에 @Table (name = “table_name”) 주석을 사용할뿐만 아니라 엔터티 클래스의 모든 자식 변수에도 @Column (name = “col_name”) 주석을 달아야합니다. 따라서 이동 중에도 테이블을 원활하게 업데이트 할 수 있습니다.
Java 클래스 기반 hibernate 구성을 찾는 사람들을 위해 규칙은 Java 기반 구성에도 적용됩니다 (NewHibernateUtil). 다른 사람에게 도움이되기를 바랍니다.