根据情况使用CascadeType.MERGE和CascadeType.PERSIST

时间:2018-07-24 09:56:51

标签: java spring hibernate jpa cascade

我想知道是否可以仅通过使用JPA批注和Spring Data的CrudRepository来解决以下问题。

以下实体是根据每个请求新创建的:

@Entity
@Table(name = "my_entity")
public class MyEntityDAO {
    ....

    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST)
    @JoinColumn(name = "my_referenced_entity_id")
    @JsonBackReference
    private MyReferencedEntityDAO myReferencedEntity;
    ....
}

CrudRepository正在使用来存储实体及其引用的元素。

myEntityRepository.save(myEntityDAO);

问题在于,这仅适用于新创建的引用(MyReferencedEntity)实体。在某些情况下,这是需要的,但有时此引用的实体将已经存在,从而导致:detached entity passed to persist

设置后

CascadeType.MERGE

适用于实体存在的情况,但是在需要创建一个新实体时会失败。

是否有一种无需使用.persist()和.merge()方法就可以通过编程方式处理此操作的方法?我已经尝试过通过注释添加两个CascadeType,但是确实会导致相同的错误。

0 个答案:

没有答案