문제

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

편집하다: 런타임은 어떻습니까? 내 Java 프로그램에는 데이터베이스 테이블을 프로그래밍 방식으로 재직 할 수있는 방법이 있습니까? org.hibernate.tool.hbm2ddl.schemaupdate 어쩌면 올바른 짐승처럼 보이지만 정확히 무엇을하는지 잘 모르겠습니다.

도움이 되었습니까?

해결책

HBM2DDL을 사용하여 데이터베이스를 생성 한 다음 데이터베이스에 존재하는 복제 / 백업을 사용하여 데이터베이스 스키마를 저장하고 해당 스크립팅을 사용하여 필요할 때마다 데이터베이스를 재현합니다. 객체 모델이 변경 될 때 데이터베이스를 생성하려면 HBM2DDL 만 실행하십시오.

다른 팁

최대 절전 모드 ANT 작업을 사용하십시오. https://www.hibernate.org/381.html

이 속성 세트를 사용하면 데이터베이스의 생성/업데이트 스크립트를 생성하여 실행할 수 있습니다. 이것은 프로토 타이핑을위한 훌륭한 도구이지만 얼마 후 다른 DB 업데이트 전략으로 이동하는 것이 좋습니다.

좋아, 모든 단서에 감사드립니다! 다음은 효과가있었습니다.

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....");
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top