【问题标题】:Java EE jta hibernate.hbm2ddl.import_files does not workJava EE jta hibernate.hbm2ddl.import_files 不起作用
【发布时间】:2014-08-09 17:40:33
【问题描述】:

我尝试在 Web 应用程序运行时导入 sql 文件。我将import.sql 放入src/main/resources/import.sql。然后我通过添加import_files 指令修改了我的persistence.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             version="2.1"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jsp.org/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="spPU" transaction-type="JTA">
    <description>SP Persistence Unit</description>
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <jta-data-source>java:jboss/datasources/SpDS</jta-data-source>

    <properties>
      <property name="hibernate.hbm2ddl.auto" value="create"/>
      <property name="hibernate.show_sql" value="true"/>
      <property name="hibernate.format_sql" value="false"/>
      <property name="hibernate.hbm2ddl.import_files" value="import.sql"/>
    </properties>
  </persistence-unit>
</persistence>

但是在重新部署或重新启动服务器后,数据库中没有任何内容可以上传。 我使用 WildFly 8.1.0、Hibernate 4.3.5.Final、数据库 h2database 1.3.161。 我试图从 import.sql 中删除空白行并将 hibernate.hbm2ddl.auto 更改为 create-drop。 知道为什么 import.sql 没有加载到数据库中吗?

【问题讨论】:

    标签: java sql hibernate


    【解决方案1】:

    我也有类似情况,请检查是否:

    1) 您可以手动运行您的 sql 脚本(导入期间发生错误时不会显示 SQL 错误

    2) 请确保所有的sql语句都是单行,例如:

        create table Table1{ column1, column2,etc.};
    

    而不是

        create table Table1{
         col1 ..,
         col2 ..,
        }
    

    我在使用 import 时注意到了这两个问题,希望这也能解决您的问题。

    [更新]
    感谢@vsapiha 支持多行sql:

    <property name="hibernate.hbm2ddl.import_files_sql_extractor">org.hibernate.tool.hbm2ddl.M‌​ultipleLinesSqlCommandExtractor</property>
    

    【讨论】:

    • 谢谢。问题出在 import.sql 中,我使用了双引号,而应该使用单引号。
    • 很高兴我能帮上忙。我强烈建议仅将导入功能用于开发目的。
    • 您可以添加此配置键以便使用多行 sql脚本&lt;property name="hibernate.hbm2ddl.import_files_sql_extractor"&gt;org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor&lt;/property&gt;
    【解决方案2】:

    您无需指定导入文件。默认情况下,Hibernate 将查看 WEB-INF/classes/import.sql,如果您将文件放在您所做的位置,它将在您的 WAR 中的位置。我总是使用 WAR,而不必指定它的位置。

    如果您使用 JAR,则导入将进入文件的根目录,根据 link。 (虽然我从未尝试过)。

    【讨论】:

    • 是的,它可以在不指定 import_files 的情况下工作,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多