Spring JPA删除@OneToOne关系

问题描述 投票:1回答:1

我有一个SpringBoot 2.1.3.RELEASE RESTful Web服务应用程序,使用Spring Initializer,嵌入式Tomcat,Thymeleaf模板引擎和包作为可执行的JAR文件,我有这个对象:

public class ImpactHint implements Serializable {



    @OneToOne(mappedBy = "impactHint", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinColumn(name = "IA_ID")
    private ImpactHintAmendment amendment ;


...

}

并且

public class ImpactHintAmendment implements Serializable, IEntity<String> {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "ID")
    private String id;

    @OneToOne(cascade = {CascadeType.ALL})
    @JoinColumn(name = "IA_ID")
    private ImpactHint impactHint;  
..
}

我试图删除,使用

em.remove(impactHint.getAmendment());
em.persist(impactHint);

并且

impactHint.setAmendment(null);
em.persist(impactHint);

在我的存储库类中,但没有任何作用

@Repository
public class ImpactHintDao extends AbstractDao<ImpactHint, String> implements IImpactHintDao {


    @PersistenceContext
    private EntityManager em;

   ..
}
hibernate spring-boot spring-mvc jpa spring-data-jpa
1个回答
0
投票

对于OneToOne双向使用mappedBy属性来定义逆映射。拥有实体ImpactHint使用@JoinColumn并具有FK列。第二实体:

public class ImpactHintAmendment {
    @OneToOne(mappedBy = "amendment")
    private ImpactHint impactHint; 

如果您更正了映射,那么孤立删除attr。应该删除Amendment而不调用删除

impactHint.setAmendment(null);
em.persist(impactHint);
© www.soinside.com 2019 - 2024. All rights reserved.