【问题标题】:Spring JPA removing @OneToOne relationshipSpring JPA 删除 @OneToOne 关系
【发布时间】:2019-08-12 01:29:24
【问题描述】:

我有一个 SpringBoot 2.1.3.RELEASE RESTful Web Service 应用程序,使用 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】:

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

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

    如果您更正了映射,则删除孤儿 attr。应该删除 Amendment 而不调用 remove

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

    【讨论】:

      猜你喜欢
      • 2021-05-22
      • 2015-10-06
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 2016-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多