복붙노트

[SPRING] Hibernate 사용자 정의 스키마 생성

SPRING

Hibernate 사용자 정의 스키마 생성

create 는 새로운 데이터베이스 스키마를 생성하고 존재하지 않는다면 update create를 생성하고 기존 데이터베이스를 업데이트합니다 개요. 데이터베이스 스키마가 존재하는지 여부를 확인하고 데이터베이스 스키마가 작성되는지 여부에 따라이를 어떻게 수행 할 수 있습니까? 현재 내 applicationContext.xml의 구성은 다음과 같습니다.

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="annotatedClasses">
        <list>
            <value>info.ems.models.User</value>
            <value>info.ems.models.Role</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.hbm2ddl.auto">create</prop>
        </props>
    </property>        
</bean>
<bean id="dao" class="info.ems.hibernate.HibernateEMSDao" init-method="createSchema">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>  

그리고 HibernateEMSDao.java :

public class HibernateEMSDao implements EMSDao {

    private final Logger logger = LoggerFactory.getLogger(getClass());

    private HibernateTemplate hibernateTemplate;

    public void setSessionFactory(SessionFactory sessionFactory) {
        this.hibernateTemplate = new HibernateTemplate(sessionFactory);
    }    

    public void saveUser(User user) {
        hibernateTemplate.saveOrUpdate(user);
    }

    public List<User> listUser() {
        return hibernateTemplate.find("from User");
    }

    public void createSchema() {
        logger.info("inserting default admin user into database");
        User admin = new User();
        admin.setUsername("admin");
        admin.setName("Admin");
        admin.setEmail("admin");
        admin.setPassword("21232f297a57a5a743894a0e4a801fc3");
        saveUser(admin);
        logger.info("Admin inserted into database");

        try {
            System.out.println(listUser().get(0).getId());
        } catch (Exception e) {
            logger.error("===================Error================");
        }
    }               
}

그것은 효과가있다. 이 구성을 얻으려면 어떤 구성이 도움이됩니까? 같은 것 :

고마워, 안부.

해결법

  1. ==============================

    1.hibernate.hbm2ddl.auto 옵션을 비활성화하고 조건을 검사하고 (아마 일반 JDBC를 사용하여) SchemaExport 클래스의 create 메소드를 호출하거나 호출하지 않을 수 있습니다. 이 작업은 응용 프로그램의 초기화 코드 (웹 응용 프로그램을 사용하는 경우 ServletContextListener)에서 수행됩니다.

    hibernate.hbm2ddl.auto 옵션을 비활성화하고 조건을 검사하고 (아마 일반 JDBC를 사용하여) SchemaExport 클래스의 create 메소드를 호출하거나 호출하지 않을 수 있습니다. 이 작업은 응용 프로그램의 초기화 코드 (웹 응용 프로그램을 사용하는 경우 ServletContextListener)에서 수행됩니다.

    SchemaExport 클래스를 사용하는 방법에 대한 예제 :

    AnnotationConfiguration config = new AnnotationConfiguration();
    config.addAnnotatedClass(info.ems.models.User.class);
    config.addAnnotatedClass(info.ems.models.Role.class);
    config.configure();
    new SchemaExport(config).create(true, true);
    
  2. from https://stackoverflow.com/questions/6167474/hibernate-custom-schema-creation by cc-by-sa and MIT license