Java EE jta hibernate.hbm2ddl.import_files不起作用

时间:2014-08-09 17:40:33

标签: java sql hibernate

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

<?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,Database h2database 1.3.161。 我试图从import.sql中删除空行并将hibernate.hbm2ddl.auto更改为create-drop。 知道为什么import.sql没有加载到数据库中吗?

2 个答案:

答案 0 :(得分:5)

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

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

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

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

而不是

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

使用导入时我注意到这两个问题,希望这也解决了你的问题。

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

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

答案 1 :(得分:1)

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

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