![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
umen |
|
||||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 11.11.2006 Репутация: нет Всего: нет |
Добрый день.
Есть два класса User, Story
Есть маппинги к ним
есть тестовый класс
в таком виде всё работает. Если в самом конце теста убрать комменты то вываливается ексепшн: java.lang.NullPointerException а по идее должна добавлятся запись в таблицу story Не могу понять в чём проблема, помогите пожалуйста |
||||||||||
|
|||||||||||
umen |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 11.11.2006 Репутация: нет Всего: нет |
Для того чтобы легче было понять в чём проблема, я написал два минимальных класса (с минимумом кода) User и Story
И организовал между ними двухстороннюю связь one-to-many. Результат работы - такой же как и в первом случае :-( минимальный код - во вложении (только *.java, *.hbm.xml) Может всё-таки кто=-то сможет понять в чем проблема Это сообщение отредактировал(а) umen - 26.4.2007, 10:38 Присоединённый файл ( Кол-во скачиваний: 14 ) ![]() |
|||
|
||||
practices |
|
||||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 1.5.2007 Репутация: нет Всего: нет |
Если подумать логически, когда загружаем объекты определённого класса (в даном примере
User), вместе с каждым объектом загружается набор связанных объектом другого класса (Set stories). Таким образом, объект user содержит ссылки на существующие в БД stories. Когда мы добавляем новую story user-у, то нужно сначала сохранить её в БД (save(story)),и только потом можно сохранять user с этой story. То есть:
Или перемести строчку save(storyX) перед stories.add.
|
||||
|
|||||
umen |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 11.11.2006 Репутация: нет Всего: нет |
При всём уважении, позволю себе не согласиться: магия технологии Hibernate в том и состоит, что не нужно заботится о сохранении всех объектов, в данном случае после добавления истории пользователю и сохранении пользователя, Hibernate сам определяет связи объектов и правильно сохраняет в базу пользователя и добавленную ему историю.
В подтверждение своих слов привожу вложение, где всё работает. Кстати я так до сих пор и непонял, почему это не работает в коде приведённом выше :( Присоединённый файл ( Кол-во скачиваний: 40 ) ![]() |
|||
|
||||
seth |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 4.6.2006 Репутация: 1 Всего: 1 |
мож кому то пригодится - нашел решение этой проблемы:
http://www.laliluna.de/254.html т.е. нужно добавить
удачи всем ![]() |
|||
|
||||
Ornitos |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.10.2007 Где: Непал Репутация: 1 Всего: 3 |
Каскадное поведение в хибернейт имеет некоторые странности.
Например, даже если вы везде выставили cascade="all", при удалении объектов при помощи HQL запроса зависимые объекты каскадно удаляться не будут. |
|||
|
||||
greef |
|
|||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 10.10.2007 Репутация: нет Всего: нет |
Может кто-то объяснит в 2 словах: что значит и в каких случаях использовать
1) cascade="all" 2) inverse="true" А то прочтение документации полного ответа не дало. |
|||
|
||||
Ornitos |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.10.2007 Где: Непал Репутация: 1 Всего: 3 |
Включает для данной ассоциации все виды каскадного поведения: каскадную вставку, обновление, удаление и репликацию. Например, при вставке сущности в базу, будет автоматически вызвана вставка и тех сущностей, для ассоциаций с которыми включена каскадная вставка. Аналогично обновление, удаление и репликация. подробный ответ на вопрос |
|||
|
||||
umen |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 11.11.2006 Репутация: нет Всего: нет |
Чтобы каскад работал и при удалении, нужно использовать cascade="all-delete-orphan" :
|
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |