문제

내 최대 절전 모드 애플리케이션에는 주석 구동 객체가 있습니다. 감사. 매우 간단하고 외국의 주요 관계가 없습니다. 나는이 테이블의 오래된 항목을 다른 테이블로 옮기어 보관합니다. Oldauditevent, 이것은 복제입니다 감사 테이블.

지금 우리는 HBM2DDL (주석이 달린 데이터 모드에서)을 사용하여 전체 애플리케이션의 DDL을 생성하고 Auditevent 테이블을 수동으로 복사/붙여 넣고 이름을 변경하여 작성합니다. Oldauditevent.

빌드 프로세스를 자동화하고 싶습니다. HBB2DDL을 알리는 방법이 있습니까?

업데이트: 나는 당신이 설명한 접근 방식으로 이것을 작동시킬 수있었습니다. 유일한 문제는 공장 콩이기 때문에 AnnotationsessionSection factoryBean에 도달하는 것이 었습니다. 정적을 통해 Bean Factory를 노출시키기 위해 configExposingAnticessionSessionSESSINSECTORYBEAN (확장 annotationSessionSectionFactoryBean)을 만들었습니다.

Configuration cfg = ConfigExposingAnnotationSessionFactoryBean.s_instance.getConfiguration();

PersistentClass pClass = cfg.getClassMapping("com.myco.LoginAttempt");
pClass.getTable().setName("ArchiveLoginAttempt");

Dialect dialect = Dialect.getDialect(ConfigExposingAnnotationSessionFactoryBean.s_instance.getHibernateProperties());

// only output create tables, not indexes or FK
for (String s : cfg.generateSchemaCreationScript( dialect )) {
    if (s.contains("create table") && s.contains("Archive")) {
        m_outstream.print(s);
        m_outstream.println(";");
    }
}
도움이 되었습니까?

해결책

그것은 가능하지만 오히려 지저분하고, 아마도이 경우에는 그만한 가치가 없습니다.

최대 절전 모드를 동적으로 변경해야합니다 구성 SessionFactory가 구축되기 전에 객체. 나는 당신이 봄을 사용하고 있습니다. 이것은 재정의하여 할 수 있습니다. postProcessAnnotationConfiguration() 의 방법 AnnotationSessionFactoryBean; 그렇지 않으면 당신은 당신을 사용하여 그것을해야합니다 Configuration 호출하기 전에 개체 buildSessionFactory() 그 위에.

클래스 / 테이블 매핑을 통해 액세스 할 수 있습니다. configuration.getMappings(). 그러면 테이블 매핑을 통해 찾아야합니다. getTable(), 새로운 이름으로 사본을 만듭니다 addTable() 모든 열 / 키를 통해 복제하십시오 테이블 API.

그런 다음 DDL 스크립트를 통해 DDL 스크립트를 생성 할 수 있습니다 generateSchemaCreationScript() 또는 generateSchemaUpdateScript() 방법 Configuration 물체.

내가 말했듯이, 아마도이 경우에는 그만한 가치가 없을 것입니다 :-)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top