使Hibernate在系统启动时插入数据



Hibernate属性- Hibernate .hbm2ddl。Import_files—只会在hibernate.hbm2ddl。Auto -设置为创建

有任何实现来"改变"这一点吗?

不是hibernate.hbm2ddl的方式。import_files行为……而是一种在系统启动后使用Hibernate插入一些数据的方法(即使表已经创建)。执行纯SQL脚本将不符合我的需求,因为@Id @GeneratedValue将不受尊重。

最后,我需要的是系统检测数据库中是否存在某些数据的方法,如果没有,则用它填充。是否有一个已知的做到这一点,并尊重我的@GeneratedValue计数器?

除了elias提出的正确答案之外,您还可以添加ServletContextListener,因为这可能是实现功能的更清晰方式。要做到这一点,你需要实现ServletContextListener接口,并用@WebListener注释类,或者在你的web.xml中声明它。

public class MyServletContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
    initializeDatabase();
}
@Override
public void contextDestroyed(ServletContextEvent sce) {   }
}

然后你必须在你的web.xml中添加一个声明:

<listener>
    <listener-class>yourpackage.MyServletContextListener</listener-class>
</listener>

或者,如果您目前使用Servlet 3.0,只需用@WebListener注释您的类。

您可以创建一个@ApplicationScoped托管bean,它调用一个将数据插入数据库的方法。

@ManagedBean(eager = true)
@ApplicationScoped
public class App {
    @PostConstruct
    public void init() {
        myDAO.initDatabaseIfNeeded();
    }
}

方法myDao.initDatabaseIfNeeded()在应用程序初始化时被调用,并且在所有依赖项被解析之后——也就是在Hibernate已经创建了所有表之后。

我最近在一个Spring应用程序上做了类似的事情,所以在我的例子中myDAO实际上是一个Spring服务。

相关内容

  • 没有找到相关文章

最新更新