Hibernate自定义架构创建

create创建一个新的数据库模式, update create如果它不存在并更新现有数据库架构。 如果我想检查数据库模式是否存在,并且根据将创建数据库模式,我该如何实现。 目前我的applicationContext.xml的配置是:

     info.ems.models.User info.ems.models.Role     org.hibernate.dialect.HSQLDialect true create       

和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 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================"); } } } 

这是工作。 什么配置可以帮助我获得这个? 就像是:

  • 检查id = 1的用户是否存在
  • 如果没有创建架构

感谢致敬。

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