因此,虽然我个人讨厌软删除,但我在一个项目中工作,每个表只能软删除。林不知道如何处理上的关联表软删除,该字段看起来像这样:如何在Hibernate的关联映射表上执行软删除?
@ManyToMany(targetEntity = AdvertisementVendor.class, fetch = FetchType.EAGER)
@JoinTable(name = "advertisement_version_advertisement_vendor_association",
joinColumns = @JoinColumn(name = "advertisement_version_id"),
inverseJoinColumns = @JoinColumn(name = "advertisement_vendor_id"))
private Set<AdvertisementVendor> _advertisement_vendors = new HashSet<>();
我已经看到了怎么办soft deletes,但我不知道我怎么会它应用到了关联表。
UPDATE:
以德拉甘Bozanovic的意见,我我的专栏更新为:
@ManyToMany(targetEntity = AdvertisementVendor.class, fetch = FetchType.EAGER)
@JoinTable(name = "advertisement_version_advertisement_vendor_association",
joinColumns = @JoinColumn(name = "advertisement_version_id"),
inverseJoinColumns = @JoinColumn(name = "advertisement_vendor_id"))
@WhereJoinTable(clause = "is_deleted = 0")
@SQLDelete(sql = "UPDATE advertisement_version_advertisement_vendor_association SET is_deleted = 1 WHERE advertisement_version_id = ? AND advertisement_vendor_id = ?", check = ResultCheckStyle.COUNT)
@SQLInsert(sql = "INSERT INTO advertisement_version_advertisement_vendor_association " +
"(advertisement_version_id, advertisement_vendor_id, is_deleted) VALUES(?, ?, 0) " +
"ON DUPLICATE KEY UPDATE is_deleted = 0")
private Set<AdvertisementVendor> _advertisement_vendors = new HashSet<>();
但这似乎并不奏效。它似乎忽略@SQLDelete,只是删除映射。
更新2:
忽略的第一次更新,它有不同的代码做。上述示例按原样运行。
解决了一个问题,谢谢,但也有更改连接表上的删除设置删除标志,并且还取消删除标志,而不是插入,如果删除了某些东西,然后读取 –
@ Mr.MonoChrome我假设你可以使['SQLDelete'](http://docs.jboss.org/hibernate/orm/5.2/javadocs/org/hibernate/annotations/SQLDelete.html)和['SQLInsert'](http://docs.jboss .org/hibernate/orm/5.2/javadocs/org/hibernate/annotations/SQLInsert.html)。 –