Hibernate 当有多个EntityManager时,如何仅导入import.sql一次?

Hibernate 当有多个EntityManager时,如何仅导入import.sql一次?,hibernate,import,hsqldb,Hibernate,Import,Hsqldb,有人知道我如何只导入一次文件import.sql吗 基本上我有多个实体管理器。每次创建entitymanager时,它都会尝试从import.sql导入sql,hibernate文档如是说。但是,这会在第二次创建EM时导致异常 是否有办法在运行时确定导入文件是否已被使用?好的,我不确定这是最好的方法,但这是一个简单的解决方案。如果像下面这样创建Entitymanager,则只需在创建第一个Entitymanager后删除hibernate.hbm2ddl.auto属性: EntityManage

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

基本上我有多个实体管理器。每次创建entitymanager时,它都会尝试从import.sql导入sql,hibernate文档如是说。但是,这会在第二次创建EM时导致异常


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

好的,我不确定这是最好的方法,但这是一个简单的解决方案。如果像下面这样创建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之类的术语(如果存在)。最初我没有注意到这一点,因为我习惯于使用Oracle,这也导致了一些错误,如用户缺乏权限或找不到对象:一些表我没有尝试过,但您可以使用org.hibernate.tool.hbm2ddl.SchemaExport在应用程序启动时手动将模式导出到数据库

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

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