Переписывание таблиц Derby DB (с FK) через JPA - PullRequest
0 голосов
/ 06 февраля 2012

Я могу заполнить 2 таблицы в БД, где таблицы имеют сопоставления (одна таблица имеет FK от другой). EclipseLink DataSource показывает, что очистка БД выполнена нормально. Я пытаюсь переписать таблицы (с теми же данными во второй раз), в то время как файл persistence.xml имеет предложение свойств выглядит следующим образом: <property name="eclipselink.ddl-generation" value="drop-create-tables" /> пока я не вижу сброса (стирания) предыдущих таблиц перед перезаписью и поэтому получаю отклонение со следующим сообщением об исключении о дублирующем ключе:

"Внутреннее исключение: java.sql.SQLIntegrityConstraintViolationException: оператор был прервано, потому что это вызвало бы дублирование значения ключа в уникальном или ограничение первичного ключа или уникальный индекс, идентифицируемый «SQL120206135740510» определен для «HOST». "(ХОСТ - указанная таблица по ФК).

Чего мне не хватает в файле persistence.xml или что должно привести к удалению таблицы перед перезаписью? Ниже смотрите файл persistence.xml (файл БД называется test). Схема - это имя после имени пользователя (в моем случае APP)):

<?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="jpa_test"> 
                <class>Host</class> 
                <class>Vm</class> 
                <properties> 
                        <property name="javax.persistence.jdbc.url" value="jdbc:derby://im6-64s:1527/test;create=true" /> 
                        <property name="javax.persistence.jdbc.user" value="APP" /> 
                        <property name="javax.persistence.jdbc.password" value="passw0rd" /> 
                        <!-- EclipseLink should create the database schema automatically --> 
                        <property name="eclipselink.ddl-generation" value="drop-create-tables" /> 
                        <property name="eclipselink.ddl-generation.output-mode" value="database" /> 
                </properties> 

        </persistence-unit> 
</persistence> 

Ответы [ 2 ]

1 голос
/ 07 февраля 2012

«drop-create-tables» должно быть «drop-and-create-tables»

0 голосов
/ 07 февраля 2012

Попробуйте добавить свойство eclipselink.logging.level со значением Finest или ALL, чтобы увидеть, почему отбрасывание может не выполняться.

...