Взаимосвязи удаляются со связанными объектами в приложении Hibernate + Gilead

StackOverflow https://stackoverflow.com/questions/5836615

Вопрос

Редактировать 11.05.2011:

Я думаю, это немного хуже, чем показано ниже; в моем развернутом экземпляре QA, если я просто обновляю основную панель управления несколько раз, в конечном итоге ассоциации групп «многие ко многим» моего пользователя удаляются. На данный момент на стороне сервера вызываются только операторы select; надеюсь, я сузил круг вопросов с помощью этих последних тестов.

Оригинал:

Всем привет. У меня проблема с довольно сложным объектом; Проблема заключается в следующем: когда я отправляю объект с клиента на сервер для сохранения, он, по-видимому, случайным образом стирает отношения «многие ко многим» на связанных объектах. Что еще хуже, я не могу воспроизвести проблему самостоятельно примерно через два месяца после того, как узнал о ней. У меня есть приложение для тестирования с группой контроля качества; они используют программу ежедневно, дважды заходя в новые и старые приложения. Проблема возникает трижды в день.

Я сделаю все возможное, чтобы предоставить как можно больше подробностей, и очень признателен всем, кто их увидит!

Платформа приложения - GWT 2.1 + Gilead + Hibernate 3 + MySQL InnoDB. Я разрешаю Hibernate обрабатывать любые каскады и т. Д., Поэтому в БД ничего не определено, хотя все внешние ключи установлены в БД.

Вот некоторые выдержки из сопоставлений:

родовое слово

Чтобы сохранить объект, просто вызовите saveOrUpdate ():

родовое слово

Close 'updateUser' - это объект, загружаемый при входе пользователя в систему. Он загружается с соответствующими группами и разрешениями, поэтому система может предоставлять / запрещать доступ к модулям приложения. Я делаю

родовое слово

перед отправкой объекта обратно на сервер.

В приложении есть множество других мест, где происходят такие операции, но они не вызывают нежелательных побочных эффектов. Вероятно, все сводится к сложности клиентского кода, связанного с объектом Close, или, скорее, моей его реализацией.

Я потратил столько времени на изучение официальных документов Hibernate, поиск возможных связанных проблем и т. д., я подумал, что, может быть, сейчас самое время попросить о помощи. Я должен набраться сил и продолжать работать, но, может быть, просто спросить поможет разобраться.

Я не знаю, что еще можно предложить прямо сейчас. Надеюсь, то, что здесь есть, актуально!

Спасибо за внимание!

< sizesЭдит родовое слово

Похоже, что удаление происходит сразу после этой вставки ... все предыдущие операции выбираются. Но ничего в User не должно каскадировать из RecentItem.

Это было полезно?

Решение

Проведя много исследований, я пришел к некоторым выводам и смог принять меры. Во-первых, после небольшого поиска на форуме Gilead я узнал, что это больше не активно поддерживается . Должен был заметить это раньше. Тем временем я начал читать о RequestFactory и после пары дней исследований решил, что мне стоит попробовать перейти на это.

Это довольно большой проект, примерно 50 объектов предметной области, некоторые из которых имеют множество ассоциаций объектов. Мне потребовалось около 40-50 часов, чтобы переписать все, от использования Gilead + GWT RPC до использования исключительно RequestFactory. Я очень доволен произошедшими изменениями в коде и структуре. Пока меня не слишком беспокоило создание прокси-объектов DTO, и я воспользовался возможностью переключиться на Hibernate Annotations, избавившись от файлов сопоставления.

Иногда было сложно провести рефакторинг кода, чтобы использовать циклы выборки / редактирования / сохранения, которые требуются RequestFactory. Это дало мне возможность улучшить часть кода.

Хорошая новость в том, что проблема решена. Больше никаких таинственных удалений ассоциаций "многие ко многим". Думаю, я обнаружил ошибку в Gilead, или я использовал ее неправильно, или, возможно, я решил проблему при переходе на аннотации.

Во время изучения RequestFactory + Hibernate я наткнулся на несколько отличных ресурсов, многие - через StackOverflow (еще раз спасибо!):

Использование GWT RequestFactory с Objectify - было здорово понять, как RequestFactory взаимодействует с серверной частью, а также некоторые методы и шаблон для сокращения кода.

Надеюсь, ниже будет больше ссылок ... Я все еще новичок, поэтому я ограничен в количестве гиперссылок, которые я могу опубликовать :)

Я многому научился и свободно говорю в RequestFactory. Я сделаю все возможное, чтобы приглядывать и помогать здесь, где я думаю, что могу.

Спасибо, StackOverflow!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top