如何将@OrderColumn 与软删除一起使用
How to use @OrderColumn with soft delete
我有一个 class PostItem
和 PostItemSigner
。他们有一个一对多的关系。另外 class PostItemSigner
是软删除的,这意味着数据库中的记录永远不会被删除,只有一个标志被设置为真或假。
public class PostItem {
// ...
@OneToMany(mappedBy = "postItem", fetch = FetchType.EAGER)
@OrderColumn(name = "sequence")
private List<PostItemSigner> signers;
// ...
}
public class PostItemSigner {
// ...
@ManyToOne
@JoinColumn(name = "post_item_id")
private PostItem postItem;
private boolean deleted;
// ...
}
创建工作正常,我的所有记录都有一个序列号。现在我的更新遇到了一些问题。
我创建了 f.e。 4 个 postitemsigners 用于 1 个 postitem,在我的更新中我删除了其中的 2 个(setDeleted(true))
。
如何在保存到数据库时获得我的 2 个未删除的 postitemsigners,序列号为 0 和 1,以及我删除的 postitemsigners 序列号为 2 和 3。如果我添加一个新的 postitemsigner,我希望这个得到序列号 2 和删除的序列号 3 和 4 f.e..
我试过先保存未删除的,然后再保存删除的,但后来由于某种原因其中一些得到了相同的序列号。
编辑:
更新后,我使用了地图 Map<Long, PostItemSigner>
而不是列表 List<PostItemSigner>
。地图将它们置于不同的顺序,而列表保持顺序。所以问题解决了!
您不能既减少序列号又不为某些项目设置相同的序列号。序列应该只在获取新值时增加。
软删除项不应出现在结果中,因为它们已被删除。但是如果你想使用某些软件或者取消删除它们,那么这个数字可能与你由于某些原因减少的当前序列号不一致。
要消除不一致,您应该更新未删除项目的序列号。如果您更新已删除的项目,则删除旧的序列号。
这类似于您想创建没有父引用的孤儿,因为父引用已被删除。请注意,如果父级违反了外键约束,则不能将其删除。
我有一个 class PostItem
和 PostItemSigner
。他们有一个一对多的关系。另外 class PostItemSigner
是软删除的,这意味着数据库中的记录永远不会被删除,只有一个标志被设置为真或假。
public class PostItem {
// ...
@OneToMany(mappedBy = "postItem", fetch = FetchType.EAGER)
@OrderColumn(name = "sequence")
private List<PostItemSigner> signers;
// ...
}
public class PostItemSigner {
// ...
@ManyToOne
@JoinColumn(name = "post_item_id")
private PostItem postItem;
private boolean deleted;
// ...
}
创建工作正常,我的所有记录都有一个序列号。现在我的更新遇到了一些问题。
我创建了 f.e。 4 个 postitemsigners 用于 1 个 postitem,在我的更新中我删除了其中的 2 个(setDeleted(true))
。
如何在保存到数据库时获得我的 2 个未删除的 postitemsigners,序列号为 0 和 1,以及我删除的 postitemsigners 序列号为 2 和 3。如果我添加一个新的 postitemsigner,我希望这个得到序列号 2 和删除的序列号 3 和 4 f.e..
我试过先保存未删除的,然后再保存删除的,但后来由于某种原因其中一些得到了相同的序列号。
编辑:
更新后,我使用了地图 Map<Long, PostItemSigner>
而不是列表 List<PostItemSigner>
。地图将它们置于不同的顺序,而列表保持顺序。所以问题解决了!
您不能既减少序列号又不为某些项目设置相同的序列号。序列应该只在获取新值时增加。
软删除项不应出现在结果中,因为它们已被删除。但是如果你想使用某些软件或者取消删除它们,那么这个数字可能与你由于某些原因减少的当前序列号不一致。
要消除不一致,您应该更新未删除项目的序列号。如果您更新已删除的项目,则删除旧的序列号。
这类似于您想创建没有父引用的孤儿,因为父引用已被删除。请注意,如果父级违反了外键约束,则不能将其删除。