在保留父数据的同时尝试 delete/update 个子元素
Trying to delete/update child elements while keeping parent data
我在一条链中有 3 个 table,最上面的是 'Corridor' @Entity
,最下面的是 Segment
@Entity
,中间的通过 @JoinTable
创建,另外两个 table 中的 id 列之间具有 ManyToMany
关系。这个叫做CorridorSegments
我正在尝试找到一种方法来保留走廊数据,并删除数据库中与 corridor
行相关的所有 segments
行和 corridor_segments
行.然后我打算更换它们。所以这几乎是一个更新过程,将原始数据保留在顶部 'corridor' table 并将其链接到新条目。
@Entity
@Table(name = "corridor")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Document(indexName = "corridor")
public class Corridor implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
@Column(name = "text_identifier", nullable = false)
private String textIdentifier;
@ManyToOne
private Jurisdiction jurisdiction;
//etc., etc., getters, setters, constructors, basic Entity class
}
@Entity
@Table(name = "segment")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Segment {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
@Column(name = "sequence", nullable = false)
private Long sequence;
@NotNull
@Column(name = "name", nullable = false)
private String name;
//etc., etc., getters, setters, constructors, basic Entity class
}
@ManyToMany(cascade = {CascadeType.ALL}, fetch=FetchType.EAGER)
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@JoinTable(name = "corridor_segments",
joinColumns = @JoinColumn(name="corridor_id", referencedColumnName="id"),
inverseJoinColumns = @JoinColumn(name="segment_id", referencedColumnName="id"))
private Set<Segment> segments = new HashSet<>();
我可以通过扩展 JPARepository 接口的存储库 class 将新条目保存到段 table,使用简单的 segmentRepository.save(segment);
但是当我尝试使用内置 segmentRepository.delete();
,没用。
我认为这可能是因为我需要在删除生效之前分离关系,或者更改中间 table 的结构,但我不确定。
关于如何删除 table 中的数据并替换它们有什么建议吗?感谢您的帮助!
加载要删除其所有 Segment
条目的 Corridor
。
从中迭代引用的 Segment
个实例。
对于每个 on,您需要将其从它所在的所有 Corridor
个实例中删除。
所以不再引用。
然后,您可以使用 delete
操作将其删除 SegementRepository
.
我在一条链中有 3 个 table,最上面的是 'Corridor' @Entity
,最下面的是 Segment
@Entity
,中间的通过 @JoinTable
创建,另外两个 table 中的 id 列之间具有 ManyToMany
关系。这个叫做CorridorSegments
我正在尝试找到一种方法来保留走廊数据,并删除数据库中与 corridor
行相关的所有 segments
行和 corridor_segments
行.然后我打算更换它们。所以这几乎是一个更新过程,将原始数据保留在顶部 'corridor' table 并将其链接到新条目。
@Entity
@Table(name = "corridor")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Document(indexName = "corridor")
public class Corridor implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
@Column(name = "text_identifier", nullable = false)
private String textIdentifier;
@ManyToOne
private Jurisdiction jurisdiction;
//etc., etc., getters, setters, constructors, basic Entity class
}
@Entity
@Table(name = "segment")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Segment {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
@Column(name = "sequence", nullable = false)
private Long sequence;
@NotNull
@Column(name = "name", nullable = false)
private String name;
//etc., etc., getters, setters, constructors, basic Entity class
}
@ManyToMany(cascade = {CascadeType.ALL}, fetch=FetchType.EAGER)
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@JoinTable(name = "corridor_segments",
joinColumns = @JoinColumn(name="corridor_id", referencedColumnName="id"),
inverseJoinColumns = @JoinColumn(name="segment_id", referencedColumnName="id"))
private Set<Segment> segments = new HashSet<>();
我可以通过扩展 JPARepository 接口的存储库 class 将新条目保存到段 table,使用简单的 segmentRepository.save(segment);
但是当我尝试使用内置 segmentRepository.delete();
,没用。
我认为这可能是因为我需要在删除生效之前分离关系,或者更改中间 table 的结构,但我不确定。
关于如何删除 table 中的数据并替换它们有什么建议吗?感谢您的帮助!
加载要删除其所有 Segment
条目的 Corridor
。
从中迭代引用的 Segment
个实例。
对于每个 on,您需要将其从它所在的所有 Corridor
个实例中删除。
所以不再引用。
然后,您可以使用 delete
操作将其删除 SegementRepository
.