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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hibernate on delete set null 
:(
    Опции темы
LSD
Дата 15.9.2007, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Никак не разберусь, как в Hibernate реализовать поведение аналогичное БД - on delete set null. Т.е. чтобы при удалении объекта, у его дочерних объектов ссылка на родителя обнулялась. Пока получается только удалять их вместе с родителем.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
mindflyer
Дата 15.9.2007, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 20.10.2004
Где: Smolensk, Russia

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



Тоже не нашёл способа реализовать on delete set null.  И, точно не помню, но вроде именно об этом говорил коллега, что мол в инете на форумах по хиберу писали, что такой возможности вовсе нет.
PM MAIL ICQ   Вверх
Aoli
Дата 15.9.2007, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



По-моему, это все-таки возможно было.
Исходя из этого дока:
Цитата

You can map entity associations in metadata with the following attributes:
■ cascade="none", the default, tells Hibernate to ignore the association.
■ cascade="save-update" tells Hibernate to navigate the association when the
transaction is committed and when an object is passed to save() or
update() and save newly instantiated transient instances and persist changes to
detached instances.
■ cascade="delete" tells Hibernate to navigate the association and delete persistent
instances when an object is passed to delete().
■ cascade="all" means to cascade both save-update and delete, as well as
calls to evict and lock.
■ cascade="all-delete-orphan" means the same as cascade="all" but, in addition,
Hibernate deletes any persistent entity instance that has been removed
(dereferenced) from the association (for example, from a collection).
■ cascade="delete-orphan" Hibernate will delete any persistent entity
instance that has been removed (dereferenced) from the association (for
example, from a collection)

если поставить save-update, то мы получим on delete set null.
PM WWW ICQ   Вверх
LSD
Дата 16.9.2007, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(Aoli @  16.9.2007,  00:49 Найти цитируемый пост)
если поставить save-update, то мы получим on delete set null

Не получим, уже пробовал. Просто будет ошибка БД при удалении.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Aoli
Дата 16.9.2007, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А на другом форуме я нашел, что у человека обратная проблема:
Он использует all-delete-orphan и у него:
When I delete the project with a simple session.delete...the row is deleted in the table "project" but the row stays in table "subscription". Only the column entry "project" is set to null.
Цитата

I use Hibernate and I am not able to do cascade delete.

After I create a project I have:

select * from project;
uid | name | shortdescription
-----+------+-----------------
1 | nc | NC Web application
(1 row)

After I subscribe to the project I have:

select * from subscription;
uid | account | project | role
-----+---------+---------+------
1 | 1 | 1 | 1
(1 row)



When I delete the project with a simple session.delete

try {
session.delete(project);
session.flush();
} catch (HibernateException e) {...

the row is deleted in the table "project"
but the row stays in table "subscription". Only the column entry "project" is set to null.

select * from subscription;
uid | account | project | role
-----+---------+---------+------
1 | 1 | | 1
(1 row)

I want the row to be deleted, how do I do that?






My two tables one for Projects and one for Subscriptions


<hibernate-mapping>

<class name="org.cobra.persistence.Project" table="project">

<id name="id" column="uid" type="long">
<generator class="increment"/>
</id>

<property name="name">
<column name="name" sql-type="char(32)" not-null="true"/>
</property>

<property name="shortDescription">
<column name="shortDescription" sql-type="char(256)" not-null="true"/>
</property>

<set name="subscriptions" table="subscription" cascade="all-delete-orphan">
<key column="project"/>
<one-to-many class="org.cobra.persistence.Subscription"/>
</set>

<set name="subscriptionsRequested" table="subscriptionRequest" cascade="all-delete-orphan">
<key column="project"/>
<one-to-many class="org.cobra.persistence.SubscriptionRequest"/>
</set>

</class>

</hibernate-mapping>


<hibernate-mapping>

<class name="org.cobra.persistence.Subscription" table="subscription">

<id name="id" column="uid" type="long">
<generator class="increment"/>
</id>

<many-to-one name="account" column="account" cascade="all" class="org.cobra.persistence.Account" />

<many-to-one name="project" column="project" cascade="all" class="org.cobra.persistence.Project" />

<many-to-one name="role" column="role" cascade="all" class="org.cobra.persistence.Role" />

</class>

</hibernate-mapping>

PM WWW ICQ   Вверх
LSD
Дата 16.9.2007, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



В понедельник попробую повторить эксперимент.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
LSD
Дата 17.9.2007, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Не сработало, все равно удаляет. Даже если на уровне базы сделать on delete set null.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java tools & IDE's | Следующая тема »


 




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


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

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