我正在尝试在整个平台上实现软删除。每个表都有一个deleted_on
列,用于过滤掉已删除的行。
这包括我在文件和用户之间的连接表。我没有找到任何有用的东西。现在我的课程看起来像这样
@Entity
public class File {
@ManyToMany
@JoinTable(
name = "file_user",
joinColumns = @JoinColumn(name = "file_id", referencedColumnName = "file_id"),
inverseJoinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id")
)
private List<User> users;
// Constructor and other fields
}
用户类:
@Entity
public class User {
@ManyToMany(mappedBy = "users")
private List<FileData> files = new ArrayList<>();
// Constructor and other fields
}
如果可能,我希望能够运行以下代码而不在业务代码中过滤它
File file = fileRepository.findOne(fileKey);
file.getUsers().remove(user);
fileRepository.save(file);
答案 0 :(得分:4)
如果您是Hibernate
作为JPA提供商,那么您可以使用@Where
注释
@Entity
@Where(clause="deleted_on=1")
public class User {
@ManyToMany(mappedBy = "users")
private List<FileData> files = new ArrayList<>();
// Constructor and other fields
}
这将在所有用户类
的查询中应用where子句附加说明:
您需要在所有关系中再次指定@where子句
@ManyToMany
@JoinTable(
name = "file_user",
joinColumns = @JoinColumn(name = "file_id", referencedColumnName = "file_id"),
inverseJoinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id")
)
@Where(clause="deleted_on=1")
private List<User> users;