This fell through the cracks. Emmanuel or Steve, please provide some feedback.
Thanks, Gail On Wed, Oct 26, 2016 at 6:48 AM, Gail Badner <gbad...@redhat.com> wrote: > HHH-11144 involves an entity that has 2 one-to-many associations with the > same type of entity, and both associations have orphanRemoval = true. > Andrea created a PR with test case at [1] > > I am not sure if this is a valid mapping. I I would like your thoughts on > this. > > Here is an excerpt of the relevant bits: > > @Entity(name = "Item") > public static class Item { > @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, > orphanRemoval = true) > protected Set<ItemRelation> lowerItemRelations = new LinkedHashSet<>(); > @OneToMany(mappedBy = "child", cascade = CascadeType.ALL, orphanRemoval > = true) > protected Set<ItemRelation> higherItemRelations = new LinkedHashSet<> > (); > } > > @Entity(name = "ItemRelation") > public static class ItemRelation { > @ManyToOne(optional = false) > @JoinColumn(name = "PARENT_ID") > private Item parent; > @ManyToOne(optional = false) > @JoinColumn(name = "CHILD_ID") > private Item child; > } > > HHH-11144 describes inconsistent behavior observed when > Item#lowerItemRelations and Item#higherItemRelations both contain the same > ItemRelation, then one of the collections is cleared. > > If the non-cleared collection is uninitialized, then the ItemRelation is > orphan deleted. > > If the non-cleared collection is initialized, then the orphan-deleted > ItemRelation is rescued when PERSIST_ON_FLUSH cascades to the non-cleared > collection elements. The next time the collections are loaded from the > database, both will still contain that same ItemRelation. > > The spec says: > > "Portable applications must otherwise not depend upon a specific order of > removal, and must not reassign an entity that has been orphaned to another > relationship or *otherwise attempt to persist it*" > > Is Hibernate doing the right thing by rescuing an orphan-deleted entity? > > In addition, this mapping allows a particular EntityRelation to be > associated with 2 different Item entities, which would mean that the same > ItemRelation would have 2 different owners with respect to orphan deletion.. > > The spec says: > > "The orphanRemoval functionality is intended for entities that are privately > “owned” by their parent entity." > > Does this mean that the mapping is invalid, since it would allow multiple > parent entities, or does it mean that the resulting behavior is undefined > (thus non-portable)? > > Please let me know your thoughts. > > Thanks, > Gail > > [1] https://github.com/hibernate/hibernate-orm/pull/1607 > _______________________________________________ hibernate-dev mailing list hibernate-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/hibernate-dev