我正在使用带有注释的 Spring 3.1 创建一个使用嵌入式 HSQL 的 DataSource。
@Bean
public DataSource dataSource() throws Exception {
EmbeddedDatabaseFactoryBean bean = new EmbeddedDatabaseFactoryBean();
bean.setDatabaseType(EmbeddedDatabaseType.HSQL);
bean.afterPropertiesSet();
DataSource object = bean.getObject();
return object;
}
我也在像这样配置一个 SessionFactory
@Bean
public SessionFactory sessionFactory() {
SessionFactory sessionFactory = new LocalSessionFactoryBuilder(dataSource)
.setNamingStrategy(namingStrategy())
.addProperties(hibernateProperties)
.addAnnotatedClass(Some.class)
.buildSessionFactory();
logger.info("Created session factory: " + sessionFactory + " with dataSource: " + dataSource);
return sessionFactory;
}
问题是,如果我使用填充数据库的@Component 创建其他一些 bean,SQL 脚本将失败,因为尚未创建数据库。我的 hibernate.properties 包含以下行来生成 DDL
properties.put("hibernate.hbm2ddl.auto", "create-drop");
所以这是bean创建的某种排序问题。然而,这个问题只发生在 Linux (Kubuntu 12.04) 而不是 Windows 7!