Используем 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