Spring 启动 JPA。删除 oneToMany 关系中的实体
Spring Boot JPA. Removing entity in oneToMany relationships
这是我的实体
package com.nimesia.sweetvillas.entities;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import java.util.List;
@Entity
@Table(name = "specs", schema = "crm")
public class SpecEntity extends AbsEntity {
@Id
@Column(name = "spec_id")
private @Getter @Setter String id;
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(
name = "specs_translations",
schema="crm",
joinColumns = @JoinColumn(name = "spec_id"),
inverseJoinColumns = @JoinColumn(name = "translation_id")
)
private @Getter @Setter
List<TextEntity> texts;
}
如您所见,与 TextEntity 之间存在一对多关系。这种关系是通过specs_translationstable.
产生的
问题来了
在创建 specEntity 时,我还可以创建它的子实体(在本例中为翻译)。在数据库中,将创建 specs_translations 中的引用和翻译中的记录(table,其中包含 textEntities 的记录)。应该的。
但是当涉及到从我的 SpecEntity 中更新和删除 TextEntity 时,虽然 specs_translations 中的引用被删除,但相关的翻译记录仍然存在。
这导致了如下图所示的情况
当我在 specs_translations 中删除它的引用时,如何删除翻译中的记录?我想通过 JPA 而不是通过 DB 来实现。
我解决了。我只是将 orphanRemoval 设置为“true”。
这是我的实体
package com.nimesia.sweetvillas.entities;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import java.util.List;
@Entity
@Table(name = "specs", schema = "crm")
public class SpecEntity extends AbsEntity {
@Id
@Column(name = "spec_id")
private @Getter @Setter String id;
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(
name = "specs_translations",
schema="crm",
joinColumns = @JoinColumn(name = "spec_id"),
inverseJoinColumns = @JoinColumn(name = "translation_id")
)
private @Getter @Setter
List<TextEntity> texts;
}
如您所见,与 TextEntity 之间存在一对多关系。这种关系是通过specs_translationstable.
产生的问题来了
在创建 specEntity 时,我还可以创建它的子实体(在本例中为翻译)。在数据库中,将创建 specs_translations 中的引用和翻译中的记录(table,其中包含 textEntities 的记录)。应该的。
但是当涉及到从我的 SpecEntity 中更新和删除 TextEntity 时,虽然 specs_translations 中的引用被删除,但相关的翻译记录仍然存在。 这导致了如下图所示的情况
当我在 specs_translations 中删除它的引用时,如何删除翻译中的记录?我想通过 JPA 而不是通过 DB 来实现。
我解决了。我只是将 orphanRemoval 设置为“true”。