[hibernate-dev] HHH-11144

Gail Badner gbadner at redhat.com
Wed Mar 15 01:24:15 EDT 2017


Emmanuel or Steve, please provide feedback.

Thanks,
Gail

On Mon, Jan 23, 2017 at 3:17 AM, Gail Badner <gbadner at 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 at 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
>>
>
>


More information about the hibernate-dev mailing list