我有一个实体类,我希望hibernate用一些常量值填充数据库中的相应表:有一些数据的几行(如果其中没有值,或者替换......)我怎样才能让hibernate做到这一点(理想情况下带有注释)?
我正在使用休眠 3.2 和 spring 3.1。
提前致谢!!!
我有一个实体类,我希望hibernate用一些常量值填充数据库中的相应表:有一些数据的几行(如果其中没有值,或者替换......)我怎样才能让hibernate做到这一点(理想情况下带有注释)?
我正在使用休眠 3.2 和 spring 3.1。
提前致谢!!!
默认情况下,如果类路径的根目录中存在此类文件,Hibernate 会尝试加载文件“import.sql”(或由属性 hibernate.hbm2ddl.import_files 指定的文件)的内容。因此,一种“解决方案”是创建一个只包含一个值并具有唯一约束的表。当 Hibernate 尝试加载文件时,由于唯一性约束,它会第二次加载失败。我没有对此进行测试,但我认为它应该可以工作。
现在,如果这听起来对您不利(对我来说确实如此),那么我建议您查看 Hibernate 用于导入此文件的代码:
我将其实现为@Singleton @Startup EJB,或作为上下文侦听器,或类似的东西。这个想法是在每次应用程序启动时运行它。然后代码将检查数据库是否为空,并在需要时导入 SQL 文件。
您希望何时填充表格?
我们在应用程序启动时检查数据库状态,并使用 Spring ContextLoaderListener填充一些表是否为空 - 如下所示:
public class ExampleContextLoaderListener extends ContextLoaderListener {
private static Log LOG = LogFactory.getLog("ContextLoaderListener");
public void contextInitialized(final ServletContextEvent event) {
super.contextInitialized(event);
final DBService dbService =
getCurrentWebApplicationContext().getBean(DBService.class);
if (!db.initalized()) {
LOG.info("DB empty ... adding new data");
// etc.
} else {
LOG.info("DB already initalized.")
}
}
}
另请参阅如何测试表是否为空。