мениТуМени
энтити Юзер
@ManyToMany(cascade = {
CascadeType.PERSIST,
CascadeType.MERGE
})
@JoinTable(name = "user_address",
joinColumns = @JoinColumn(name = "id_user"),
inverseJoinColumns = @JoinColumn(name = "id_address"))
@ToString.Exclude
Set<Address> addresses = new HashSet<>();
public void addAddress(Address address) {
addresses.add(address);
address.getUsers().add(this);
}
энтити Адрес
@Convert(converter = StringConverter.class)
@ManyToMany(mappedBy = "addresses")
private Set<User> users = new HashSet<>();
каскад это не умный механизм укладывания дерева объектов в базу, он просто вызывает для потомка то же события что и для родителя ты перзистишь transient-родителя с detached-потомком и persist для потомка падает гуглится как события jpa и жизненный цикл сущности
проблема тут? addressRepository.saveAll(tAddresses); tAddresses.forEach(t -> { user.addAddress(t); log.info("Temporary Address data for new user by pin {}, is saved and data is: {}", user.getPin(), t); });
скорее проблема в каскаде, на saveAll spring-data проверяет тип объекта, и в твоём случае вызывает для него persist и из-за каскада это действие автоматом применяется и к потомку а тебе этого не надо, убирай каскад и делай сохранение руками
это все в одной транзакции?
да, но именно у адреса стоит асинк
Где? Пока полностью код
Обсуждают сегодня