如何在拥有多个实体管理器时只导入一次import.sql?

时间:2012-11-28 14:11:45

标签: hibernate import hsqldb

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

基本上我有多个实体管理员。每次创建一个entitymanager时,它都会尝试从import.sql导入sql(所以hibernate docs也是如此)。但是,这会在第二次创建EM时导致异常。

如果导入文件已被使用,是否有办法在运行时找到?

2 个答案:

答案 0 :(得分: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”

答案 1 :(得分:0)

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

从文档:命令行工具将表架构导出到数据库。也可以从应用程序内部调用此类。

SchemaExport export = new SchemaExport(config);
export.setInputFile("import.sql");
export.create(false, true);