У меня возникла проблема при попытке сохранить элемент коллекции, и одно из его свойств уже является постоянным объектом в базе данных.
Попытка прояснить этот упрощенный пример:
- Класс A имеет список класса B (One to Many, mappedBy, CascadeType.PERSIST, CascadeType.MERGE)
- Класс B связан с A (Many to One, JoinColumn)
- Класс B наследуется от BParent (Single Table)
- BParent связан с классом C (Many to One, CascadeType.MERGE, CascadeType.PERSIST)
Когда я запускаю ARepository.save (entity) передает ему полный объект (со списком B, включающим один объект B с новым C связанным), он обычно сохраняет все объекты.
Когда я запускаю ARepository.save (entity ) передача объекта, связанного с существующим (со списком B, включающим объект B, созданный с СУЩЕСТВУЮЩИМ C связанным, то есть только с идентификатором), он запускает отсоединенный объект, переданный для сохранения ошибки.
org.hibernate.PersistentObjectException: detached entity passed to persist: C
What im tr Необходимо сохранить новый связанный объект (если у него нет идентификатора) или связать его с существующим объектом (если у него есть идентификатор).
Все мои репозитории - это интерфейсы Spring Data JpaRepository. Мой код выглядит так (геттеры и сеттеры опущены):
@Entity
public class A {
@OneToMany(mappedBy = "bEntity", cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
private List<B> bList = new ArrayList<>();
}
@Entity
@DiscriminatorValue("B")
public class B extends BParent {
@ManyToOne
@JoinColumn(name = "CVLE_CVL_UUID")
private A bEntity;
}
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "CVLE_TIPO")
@Table( name = "TAB_CONTA_VINCULADA_LANC_EMPREGADO")
public abstract class BParent {
@Id
private UUID id;
@ManyToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST})
@JoinColumn(name = "CVLE_EMP_UUID")
private C cEntity;
}
@Entity
@Table( name = "TAB_EMPREGADO")
public class C {
@Id
@Column(name = "EMP_UUID")
private UUID id;
}
Надеюсь, я смог объяснить это правильно (английский sh не мой родной язык). Я был бы признателен, если бы кто-нибудь помог мне в этом, спасибо.