[
http://opensource.atlassian.com/projects/hibernate/browse/HHH-1395?page=c...
]
Josh Joy commented on HHH-1395:
-------------------------------
Using the utils-parent-20091117.tar.gz I'm receiving the following error
java.lang.IllegalStateException: Cannot join non-detached tree represented by ******
nsThread != id
at
org.hibernate.utils.nestedset.UpdateNestedSetOperation.assertIsJoinable(UpdateNestedSetOperation.java:352)
at
org.hibernate.utils.nestedset.UpdateNestedSetOperation.join(UpdateNestedSetOperation.java:223)
at
org.hibernate.utils.nestedset.UpdateNestedSetOperation.executeOnDatabase(UpdateNestedSetOperation.java:74)
at org.hibernate.utils.nestedset.NestedSetOperation.execute(NestedSetOperation.java:90)
at
org.hibernate.utils.nestedset.NestedSetPostUpdateEventListener.onPostUpdate(NestedSetPostUpdateEventListener.java:29)
For the following condition,only the root of the tree would satisfy the following
condition. Confused as to why it would reach this point
if (!nsThread.equals(node.getId()))
throw new IllegalStateException("Cannot join non-detached tree represented by "
+ nodeEntityName + "#" + id + ": nsThread != id");
Hierarchical entity data management using 'modified preorder
tree traversal algorithm' (nested set trees)
----------------------------------------------------------------------------------------------------------
Key: HHH-1395
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-1395
Project: Hibernate Core
Issue Type: New Feature
Components: core, query-hql
Environment: Hibernate 3.1 plus Annotations extending EJB3 implementation
Reporter: James Salt
Attachments: nestedset.tar.gz, utils-parent-20091117.tar.gz
Original Estimate: 168h
Remaining Estimate: 168h
An enhancement to allow entities to exist in a managed tree (DAG) structure, via the use
of property annotations and entity annotations. With an extension to the HQL language to
mimic the Oracle recusive query clause.
This would be classically be useful for Bill of Material uses, or any tree like entity
structure.
I have implemented a homebrew approach using the 'adjacency list method' , and a
post persist call back method to set the node path. Although I think a more full blown
optimised algorithm would be the 'modified preorder tree traversal algorithm'.
In the annotations world this could be implemented using an annotation like @Hierarchical
to the entity, with a @Parent (mask for @ManyToOne) annotation on the parent
field/parameter and @Children (mask for @OneToMany) annotation on the list of children
entities.
Then a postupdate method could be implemented for the entity type, that recalculates the
tree meta data -i.e. parent, left and right.
I believe this would be a valuable extension (useful for many common data models) to the
hibernate core product that could be exposed through annotations as I have discussed and
the hbm.xml.
The users of such a system would be aware of the performance implications on
insert/update/delete, but gain a massive performance gain on querying a tree data model.
--
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