Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> hibernate many-to-many saving, сохранение замкнутого дерева объектов 
:(
    Опции темы
iluvatar
Дата 30.10.2008, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 266
Регистрация: 17.9.2007

Репутация: 4
Всего: 4



Есть 1 таблица которая содержит, скажем, элементы.

Elements:
id
name
url

каждый элемент может ссылаться на несколько других. Получается связь many-to-mant, реализованная через таблицу
ElementLinks:
id
parentId
childId

Вот мой меппинг
Код

<hibernate-mapping>
    <class name="Element" table="Elements" mutable="true">
        <id name="id" type="integer" column="id">
            <generator class="identity"/>
        </id>
        
        <property name="url" column="url"/>
        <property name="name" column="name"/>
        
        <set name="childs" table="ElementLinks" lazy="false">
            <key column="parentId"/>
            <many-to-many column="childId" class="Element"/>
        </set>
        
        <set name="parents" table="ElementLinks" lazy="false">
            <key column="childId"/>
            <many-to-many column="parentId" class="Element"/>
        </set>
    </class>
</hibernate-mapping>


Проблема начинается при сохранении. Например, я создал дерево объектов. Причем оно может быть замкнутое.
Пример:
Element a1; его чилды: b1 и b2. 
чилды b1: a1 и c1

Как это сохранить? Пытался проходить по всему дереву и сейвить каждый элемент, которого нет в бд (проверка - уникальность name и url). Причем делать все это одной транзакцией. 
Но выдает ошибку
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: 
ru.....Element



PM MAIL ICQ   Вверх
v2v
Дата 30.10.2008, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 9
Всего: 56



1) сохраняешь a1
2) сохраняешь b1 , b2 с парентом а1
3) сохраняешь с1 с парентом b1
4) обновляешь а1  парентом b1



--------------------
PM   Вверх
iluvatar
Дата 30.10.2008, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 266
Регистрация: 17.9.2007

Репутация: 4
Всего: 4



Делать это одной транзакцией?
PM MAIL ICQ   Вверх
v2v
Дата 30.10.2008, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 9
Всего: 56



4e надо наверное вынести отдельно ... но надо пробовать. 


--------------------
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0403 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.