CascadeType для поведения "getOrCreate" с дочерней сущностью Hibernate - PullRequest
0 голосов
/ 27 июня 2019

У меня есть две сущности 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, чтобы оба без необходимости реализации дополнительной логики?

...