Как работать с javax.persistence.sql-load-script-source?

Я хочу автоматически вставлять данные в свои таблицы MySQL. Поэтому я пытаюсь использовать свойство JPA "javax.persistence.sql-load-script-source" в моем persistence.xml:

<?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. К сожалению, эти команды не выполняются. Я забыл недвижимость?


person Benny Neugebauer    schedule 04.05.2013    source источник


Ответы (3)


Какую версию EclipseLink вы используете? Эти свойства являются частью JPA 2.1, поэтому вы должны использовать версию EclipseLink 2.5 (еще не выпущенную).

Включите ведение журнала в лучшем случае, чтобы увидеть, возникают ли какие-либо ошибки.

person James    schedule 06.05.2013

Более общий ответ, добавленный Джеймсу, заключается в том, что 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, и свойства будут работать.

person Magnilex    schedule 06.10.2014

Думаю, проблема в стоимости имущества. Вы должны установить расположение относительно 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>

Я рекомендую вам перейти по этой ссылке для получения дополнительной информации о создании схемы базы данных

person lcnicolau    schedule 24.09.2014