У меня есть две сущности a и b, которые полагаются на другую сущность c, тогда как c можно рассматривать как статическую таблицу.Сущности A и B могут иметь ссылку на существующие сущности c.
Мой код работает, если я создаю EntityC, который еще не существует, см. Ниже:
public class EntityA {
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private EntityC entityC;
}
Я сохраняю объекты с
EntityA a = new EntityA();
a.setEntityC(new EntityC("MyEntity"));
repository.save(a);
Однако я хотел бы использовать EntityC с именем «MyEntity» сейчас с EntityB, если он уже существует.
EntityA a = new EntityA();
Optional<EntityC> existingEntity = entityCRepository.findEntityCByName("MyEntity)
a.setEntityC(existingEntity.orElse(new EntityC("A Name")));
repository.save(a);
CascadeType. Все теперь ведет к
вложенным исключением является org.hibernate.PersistentObjectException: отдельная сущность передана для сохранения: com.mypackage.EntityC
Поэтому я переключился на CascadeType.MERGE , которыйделает именно то, что я хочу, если запись уже существует.
Как я могу объединить эти два типа CascadeType, чтобы оба без необходимости реализации дополнительной логики?