[
http://opensource.atlassian.com/projects/hibernate/browse/HHH-785?page=co...
]
Joe Kelly commented on HHH-785:
-------------------------------
I realize this issue is closed but I wanted to put in my two cents. I totally agree with
Christian's argument: persistence through cascading should indeed have higher
precedence than orphan-delete. As Christian says, without this feature, you must resort
to complex session coding to relocate a node.
Christian's code example seems to be the most natural and transparent way to relocate
a node, but it doesn't work, of course:
a.remove(b);
c.add(b);
session.flush();
The following code works but seems less natural and transparent, in my opinion:
b.setParent(c);
session.flush();
session.refresh(a);
session.refresh(c);
Persistence through cascading should have higher precedence than
orphan-delete
------------------------------------------------------------------------------
Key: HHH-785
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-785
Project: Hibernate3
Issue Type: Improvement
Components: core
Affects Versions: 3.1 beta 1
Reporter: Christian Bauer
A typical tree mapped using an adjacency list:
<many-to-one name="parent" cascade="none"/>
<set name="children" cascade="all, delete-orphan"/>
A normal tree operation is moving a node:
a.remove(b);
c.add(b);
This results in an exception, as Hibernate currently rates the delete-orphan as more
important and warns that the node would become persistent again through cascading.
However, this is the only way to implement relocation of a node in a tree without
resorting to complex session coding. I argue that the "delete orphans" guarantee
given in the mapping should not have precedence over the the actual non-orphaned
persistent state in the Session.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira