hibernate填充表(如果为空)

hibernate填充表(如果为空),hibernate,auto-populate,Hibernate,Auto Populate,我有一个实体类,我希望hibernate用一些常量值填充DB中的对应表:几行数据(如果其中没有值,或者替换…) 我如何让hibernate做到这一点(最好是使用注释) 我正在使用Hibernate3.2和Spring3.1 提前感谢 您希望何时填充表 我们在应用程序启动时检查数据库状态,如果表为空,则使用Spring填充一些表,如下所示: public class ExampleContextLoaderListener extends ContextLoaderListener { p

我有一个实体类,我希望hibernate用一些常量值填充DB中的对应表:几行数据(如果其中没有值,或者替换…) 我如何让hibernate做到这一点(最好是使用注释)

我正在使用Hibernate3.2和Spring3.1


提前感谢

您希望何时填充表

我们在应用程序启动时检查数据库状态,如果表为空,则使用Spring填充一些表,如下所示:

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.")
        }

    }
}

另请参见。

默认情况下,如果文件“import.sql”(或由属性Hibernate.hbm2ddl.import_files指定的文件)位于类路径的根目录中,则Hibernate会尝试加载该文件的内容。因此,一个“解决方案”是创建一个只包含一个值且具有唯一约束的表。当Hibernate尝试加载文件时,由于唯一的约束,它将第二次加载失败。我还没有测试过这个,但我认为它应该可以工作

现在,如果这听起来对您不好(对我不好),那么我建议您看看Hibernate用于导入此文件的代码:

我将把它实现为@Singleton@startupEJB,或者作为上下文侦听器,或者类似的东西。我们的想法是在每次应用程序启动时运行它。然后,代码将检查数据库是否为空,并在需要时导入SQL文件