【问题标题】:How to work with javax.persistence.sql-load-script-source?如何使用 javax.persistence.sql-load-script-source?
【发布时间】:2013-04-29 01:53:13
【问题描述】:

我想自动将数据插入到我的 MySQL 表中。因此,我尝试在 persistence.xml 中使用 JPA 属性“javax.persistence.sql-load-script-source”:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  <persistence-unit name="my-PU" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>jdbc/coding</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
      <property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
      <property name="javax.persistence.ddl-drop-script-source" value="drop.sql" />
      <property name="javax.persistence.sql-load-script-source" value="insert.sql"/>
    </properties>
  </persistence-unit>
</persistence>

SQL 脚本(drop.sql 和 insert.sql)存储在“src/main/resources”中并包含 SQL 命令。不幸的是,这些命令没有被执行。我忘记了一个属性吗?

【问题讨论】:

    标签: mysql jpa ddl persistence.xml sql-scripts


    【解决方案1】:

    您使用的是什么版本的 EclipseLink?这些属性是 JPA 2.1 的一部分,因此您必须使用 EclipseLink 2.5 版本(尚未发布)。

    启用最佳登录以查看是否发生任何错误。

    【讨论】:

      【解决方案2】:

      对 James 添加的更一般的答案是 JPA 2.1 是 JEE7 规范的一部分。兼容 JEE6(指定 JPA 2.0)的应用程序服务器无法使用这些属性(无需为 JPA 2.1 修补服务器):

      <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
      <property name="javax.persistence.schema-generation.create-source" value="script"/>
      <property name="javax.persistence.schema-generation.create-script-source" value="META-INF/sql/create.sql" />
      <property name="javax.persistence.sql-load-script-source" value="META-INF/sql/data.sql" />
      <property name="javax.persistence.schema-generation.drop-source" value="script" />
      <property name="javax.persistence.schema-generation.drop-script-source" value="META-INF/sql/drop.sql" />
      

      实现 JEE6 的应用服务器的一个示例是 Jboss 7。然而,Wildfly 8 实现了 JEE7,这些属性应该可以使用。

      如果您不确定,请注意观察persistence 标记上的version 属性。在这种情况下,它是2.0。如果它被指定为2.1,并且正确配置,则使用 JPA 2.1 并且属性将起作用。

      【讨论】:

        【解决方案3】:

        我认为问题在于财产的价值。您必须设置与 src 相关的位置。像这样的:

        <properties>
          <property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
          <property name="javax.persistence.ddl-drop-script-source" value="main/resources/drop.sql" />
          <property name="javax.persistence.sql-load-script-source" value="main/resources/insert.sql"/>
        </properties>
        

        我建议您访问此链接以获取有关 Database Schema Creation 的更多信息

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-01-27
          • 1970-01-01
          • 2016-11-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-07
          相关资源
          最近更新 更多