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服务。