【问题标题】:How to import import.sql only once when having multiple entitymanagers?有多个实体管理器时如何只导入一次 import.sql?
【发布时间】:2012-11-28 14:11:44
【问题描述】:

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

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

有没有办法在运行时查出导入文件是否已经被使用过?

【问题讨论】:

    标签: hibernate import hsqldb


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      好的,我不确定这是不是最好的方法,但它是一个简单的解决方案。如果您像这样(如下)创建 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”之类的错误

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多