Спящий режим автоматически удаляет первого ребенка в @ManyToOne и @OneToManyAssociation - PullRequest
0 голосов
/ 27 февраля 2019

Используем springboot2 с hibernate 5.2.17.У нас странное поведение hibernate с @ManyToOne и @ OneToMany

Псевдокод

 public class OwningSide {

   @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "owningSide")
   @MapKey(name = "keyColumn")
   @SortNatural
   private SortedMap<Long, NonOwningSide> nonOwningSideMap= new TreeMap<>(naturalOrder());       
}

public class NonOwningSide {

 @ManyToOne(cascade = CascadeType.ALL, targetEntity = OwningSide.class)
 @JoinColumn(name = "owningSide_id")
 private OwningSide owningSide;
}

public class Service{

    @Transactional
   public void removeByKey(OwnerSide ownerSide)
    {
 SortedMap<Long, NonOwningSide> nonOwningSideMap=ownerSide.getNonOwningSideMap();
             nonOwningSideMap.remove(3);

     }
}

После возврата, hibernate, удалите 2 строки.

Hibernate: delete from schema.NonOwnerTable where id=? and version=?
Hibernate: delete from schema.NonOwnerTable where id=? and version=?

Это удалитьмой ряд, который я хочу удалить, и первый ряд на карте.Всегда первая строка.

Если я удаляю Cascade.ALL из @ManyToOne, проблема решается.Но я не понимаю, почему в спящем режиме удаляю первую строку с помощью Cascade.ALL

...