Emmanuel or Steve, please provide feedback.
Thanks,
Gail
On Mon, Jan 23, 2017 at 3:17 AM, Gail Badner <gbadner(a)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 <gbadner(a)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
>