我有一个实体类,我希望hibernate使用一些常量值填充DB中的相应表:带有一些数据的几行(如果没有值,或者替换...) 我如何要求hibernate执行此操作(理想情况下使用注释)?
我正在使用hibernate 3.2和spring 3.1。
提前致谢!!!
答案 0 :(得分:1)
默认情况下,如果类路径的根目录中存在此类文件,则Hibernate会尝试加载文件“import.sql”(或属性hibernate.hbm2ddl.import_files指定的文件)的内容。因此,一个“解决方案”是创建一个只包含一个值的表,并具有唯一约束。当Hibernate尝试加载文件时,由于唯一约束,它将无法第二次加载它。我没有测试过这个,但我认为它应该可行。
现在,如果这听起来不好(对我而言),那么我建议你看看Hibernate用来导入这个文件的代码:
我将它作为@Singleton @Startup EJB或作为上下文监听器或类似的东西来实现。我的想法是每次应用程序启动时运行它。然后代码将检查数据库是否为空,并在需要时导入SQL文件。
答案 1 :(得分:0)
您希望何时填充表格?
我们在应用程序启动时检查数据库状态,并使用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.")
}
}
}