Eclipselink живет в прошлом, DDL не отражает сущностей - PullRequest
1 голос
/ 21 сентября 2010

Странные вещи ... Я с удовольствием использовал EclipseLink / JPA 2 в качестве провайдера для моего модуля персистентности некоторое время (с СУБД MySQL сзади).У меня была отключена функция DDL-drop / create, так как я хотел хранить записи в БД, и в любом случае не было никаких изменений в сущностях.

Теперь я только что сделал некоторые большие изменения в одной сущности (добавление некоторых атрибутов, переименование / повторный набор других, импорт ранее встроенного объекта в эту сущность и т. д.).Я включаю DDL-drop / create, повторно развертываю пару раз, и ... ничего не меняется!

EclipseLink фактически создает (и заново создает) таблицы SQL на основе old информация!Это похоже на то, что где-то есть копия класса Java и игнорируется тот, который я только что обновил ...

Еще более сумасшедший, ранее внедренный объект исчез.Я удалил файл класса.Eclipselink still создает атрибуты в таблице ранее внедренного класса.

Я не вижу исключений в GlassFish server.log.Я бросил и воссоздал модуль сохранения, без изменений.Есть идеи?(Дайте мне знать, если я должен опубликовать какой-либо код / ​​записи журнала, и я обновлю это сообщение.)

Обновление: После установки eclipselink.logging.level в FINEST я все еще вижубез исключений.DDL-скрипт создается (с неверными столбцами в нем) и успешно выполняется на БД (конечно, создавая неправильные столбцы).В журналах я вижу, что EclipseLink говорит о полях, которых там больше нет:

[#|2010-09-22T17:04:11.392+0200|CONFIG|glassfish3.0.1|org.eclipse.persistence.session.file:/Users/hank/NetBeansProjects/CoreServer/build/classes/_coreServerPersistenceUnit.ejb_or_metadata|_ThreadID=20;_ThreadName=Thread-1;|
The alias name for the entity class [class mvs.entity.Shopper] is being defaulted to: Shopper.|#]

[#|2010-09-22T17:04:11.392+0200|CONFIG|glassfish3.0.1|org.eclipse.persistence.session.file:/Users/hank/NetBeansProjects/CoreServer/build/classes/_coreServerPersistenceUnit.ejb_or_metadata|_ThreadID=20;_ThreadName=Thread-1;|
The column name for element [field msisdn] is being defaulted to: MSISDN.|#]

[#|2010-09-22T17:04:11.392+0200|CONFIG|glassfish3.0.1|org.eclipse.persistence.session.file:/Users/hank/NetBeansProjects/CoreServer/build/classes/_coreServerPersistenceUnit.ejb_or_metadata|_ThreadID=20;_ThreadName=Thread-1;|
The column name for element [field imei] is being defaulted to: IMEI.|#]

В этом случае mvs.entity.Shopper - это класс.msisdn - это существующее поле, но imei больше не существует.Не знаю, откуда EclipseLink получает информацию от ...

Кстати, у меня eclipselink.weaving установлено на false, так как это вызывало проблемы с отложенной загрузкой.Может ли это быть связано?

Обновление 2: Следуя совету Гордона, я искал старые копии сущности, но не мог их найти.Развертывание приложения на свежем GlassFish не показывало поведение сверху;вместо этого было сделано правильное отображение , как при создании DDL!Йиппи:)

Мой единственный вывод - старая копия должна храниться где-то в GlassFish, даже после ее удаления ... Имеет ли это смысл?

Ответы [ 2 ]

1 голос
/ 22 сентября 2010

Либо у вас есть файл orm.xml в вашем пути к классам со старыми сопоставлениями, либо разворачивается старая версия класса.EclipseLink не имеет возможности «хранить» классы между развертываниями.Попробуйте декомпилировать файл класса в своем развертывании, чтобы увидеть, есть ли в нем ваши изменения.

0 голосов
/ 23 сентября 2010

Установка новой копии GlassFish и развертывание приложений для нее решили проблему. После сравнения двух копий GF я обнаружил старый артефакт сборки в glassfish/domains/domain1/lib, который содержал старые определения сущностей. После удаления все было как положено.

Итак, в конце концов, моя собственная глупая ошибка.

...