Spring JPA 删除 @OneToOne 关系
Posted
技术标签:
【中文标题】Spring JPA 删除 @OneToOne 关系【英文标题】:Spring JPA removing @OneToOne relationship 【发布时间】: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;
..
【问题讨论】:
【参考方案1】:对于 OneToOne 双向使用 mappedBy
属性来定义逆映射。拥有实体 ImpactHint 使用 @JoinColumn
并具有 FK 列。第二个实体:
public class ImpactHintAmendment
@OneToOne(mappedBy = "amendment")
private ImpactHint impactHint;
如果您更正了映射,则删除孤儿 attr。应该删除 Amendment
而不调用 remove
impactHint.setAmendment(null);
em.persist(impactHint);
【讨论】:
以上是关于Spring JPA 删除 @OneToOne 关系的主要内容,如果未能解决你的问题,请参考以下文章
休眠 | Spring Data JPA | @OneToOne
JPA OneToOne,外键在 Spring Boot 上为空