gpt4 book ai didi

linux - 内存数据库中带有嵌入式 HSQL 的 Spring DataSource 和 Linux 上的 hibernate create-drop ordering

转载 作者:太空宇宙 更新时间:2023-11-04 11:28:16 24 4
gpt4 key购买 nike

我正在使用带注释的 Spring 3.1 创建一个使用嵌入式 HSQL 的数据源。

@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 上!

最佳答案

我已经解决了在填充数据库的 @Component bean 中我必须像这样添加 @DependsOn 注释

@Component
@DependsOn({"dataSource", "sessionFactory"})
public class DevSqlPopulator {
...
}

关于linux - 内存数据库中带有嵌入式 HSQL 的 Spring DataSource 和 Linux 上的 hibernate create-drop ordering,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13147292/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com