与Hibernate子实体进行“ getOrCreate”行为的CascadeType

时间:2019-06-27 12:37:03

标签: java spring hibernate jpa cascade

我有两个实体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组合在一起而无需实现额外的逻辑呢?

0 个答案:

没有答案