2

我想自动将数据插入到我的 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 命令。不幸的是,这些命令没有被执行。我忘记了财产吗?

4

3 回答 3

2

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

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

于 2013-05-06T15:58:18.480 回答
1

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,并且这些属性应该可以使用。

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

于 2014-10-06T08:04:42.090 回答
0

我认为问题在于财产的价值。您必须设置与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>

我建议您访问此链接以获取有关数据库模式创建的更多信息

于 2014-09-24T22:20:22.840 回答