Emmanuel or Steve, please provide feedback. Thanks, Gail
On Mon, Jan 23, 2017 at 3:17 AM, Gail Badner <gbad...@redhat.com> wrote: > 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