2009-05-18 3 views
2

최대 절전 모드에서 시작하고 있으며 지금까지 너무 어렵지 않습니다. 하지만 hbm2ddl.auto 속성에 대해 혼란스러워합니다. 이 작업이 데이터베이스 테이블을 초기화하기 위해 수동으로 실행하는 방법이 있습니까? 데이터베이스를 변경 한 후에 만이 작업을 수행하기를 원하며, 프로그램을 실행할 때가 아닙니다.필요한 Hibernate 데이터베이스 테이블의 수동 초기화

편집 : 어떨까요? 내 Java 프로그램에서 프로그래밍 방식으로 데이터베이스 테이블을 다시 초기화 할 수있는 방법이 있습니까? org.hibernate.tool.hbm2ddl.SchemaUpdate 어쩌면 올바른 짐승 같아 보이지만 정확하게 무엇을하는지 모르겠습니다.

답변

2

그때, 데이터베이스를 생성하는 hbm2ddl을을 사용하여 데이터베이스 스키마를 저장하는 데이터베이스에/백업이 어떤 복제 사용하고, 데이터베이스 될 때마다 다시 그 스크립트를 사용합니다 당신은 필요합니다; 개체 모델이 변경 될 때만 HBM2DDL을 실행하여 데이터베이스를 생성하십시오.

0

이 속성을 설정하면 데이터베이스 용 만들기/업데이트 스크립트를 생성하고 실행할 수 있습니다. 이것은 프로토 타이핑을위한 훌륭한 도구이지만, 얼마 후 다른 DB 업데이트 전략으로 옮길 것을 제안합니다.

0

좋아, 모든 단서를 가져 주셔서 감사합니다! 는 일 다음 :

내 응용 프로그램 코드에서 다음
public class HibernateUtil { 
... 

    public static SessionFactory createSessionFactory(Properties p) 
    { 
    try { 
     // Create the SessionFactory from hibernate.cfg.xml 
     Configuration cfg = new AnnotationConfiguration().configure(); 
     if (p != null) 
      cfg.addProperties(p); 
     return cfg.buildSessionFactory(); 
    } catch (Throwable ex) { 
     // Make sure you log the exception, as it might be swallowed 
     System.err.println("Initial SessionFactory creation failed." + ex); 
     throw new ExceptionInInitializerError(ex); 
    } 
    } 
} 

:

private void init() { 
    Properties p = new Properties(); 
    p.setProperty("hibernate.hbm2ddl.auto", "create"); 
    Session session = HibernateUtil.createSessionFactory(p) 
     .getCurrentSession(); 
    session.beginTransaction(); 
    session.getTransaction().commit(); 
    session.getSessionFactory().close(); 
    System.out.println("should be initialized...."); 
}