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