1

有谁知道我如何只导入文件 import.sql 一次?

基本上我有多个实体经理。每次创建 entitymanager 时,它都会尝试从 import.sql 导入 sql(所以说休眠文档)。但是,这会在第二次创建 EM 时导致异常。

是否有办法在运行时找出导入文件是否已被使用?

4

2 回答 2

0

好的,我不确定这是最好的方法,但它是一个简单的解决方案。如果您像这样(如下)创建 Entitymanager,则只需在创建第一个 EntityManager 后删除属性“hibernate.hbm2ddl.auto”:

EntityManagerFactory emf = Persistence.createEntityManagerFactory(
            "bla", props);
EntityManager em = emf.createEntityManager();

props.remove("hibernate.hbm2ddl.auto"); // <-- important

EntityManagerFactory emf2 = Persistence.createEntityManagerFactory(
            "bla2", props);
EntityManager em2 = emf2.createEntityManager();

此外,我已经看到 import.sql 允许使用“DROP TABLE IF EXISTS”之类的术语。我最初错过了这一点,因为我习惯于使用 Oracle,这也导致了诸如“用户缺少特权或找不到对象:SOME_TABLE”之类的错误

于 2012-11-29T08:38:32.573 回答
0

我没有尝试过,但是您可以org.hibernate.tool.hbm2ddl.SchemaExport在应用程序启动时使用手动将架构导出到数据库。

来自文档:用于将表模式导出到数据库的命令行工具。这个类也可以从应用程序内部调用。

SchemaExport export = new SchemaExport(config);
export.setInputFile("import.sql");
export.create(false, true);
于 2012-11-29T10:23:37.313 回答