Java Hibernate自定义模式创建

Java Hibernate自定义模式创建,java,hibernate,spring,Java,Hibernate,Spring,create创建一个新的数据库架构,如果数据库架构不存在,则更新它,并更新现有的数据库架构。如果我想检查数据库模式是否存在,并且取决于将创建的数据库模式,我如何实现这一点。当前我的applicationContext.xml的配置是: <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property

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>  

info.ems.models.User
info.ems.models.Role
org.hibernate.dialogue.hsql方言
真的
创造
和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================");
        }
    }               
}
public类HibernateEMSDao实现EMSDao{
私有最终记录器Logger=LoggerFactory.getLogger(getClass());
私有HibernateTemplate HibernateTemplate;
public void setSessionFactory(SessionFactory SessionFactory){
this.hibernateTemplate=新的hibernateTemplate(sessionFactory);
}    
公共void saveUser(用户){
hibernateTemplate.saveOrUpdate(用户);
}
公共列表listUser(){
返回hibernateTemplate.find(“来自用户”);
}
public void createSchema(){
info(“将默认管理员用户插入数据库”);
用户管理员=新用户();
admin.setUsername(“admin”);
admin.setName(“admin”);
admin.setEmail(“admin”);
管理员设置密码(“21232f297a57a5a743894a0e4a801fc3”);
保存用户(管理员);
logger.info(“管理员插入数据库”);
试一试{
System.out.println(listUser().get(0.getId());
}捕获(例外e){
logger.error(“========================================================================================”);
}
}               
}
它正在工作。什么配置将帮助我获得此功能? 比如:

  • 检查id=1的用户是否存在
  • 如果没有,请创建模式

谢谢大家。

您可以禁用
hibernate.hbm2ddl.auto
选项,检查条件(可能使用普通JDBC)并调用(或不调用)类的方法。这将在应用程序的初始化代码中完成(如果您正在使用web应用程序,则为
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);