【发布时间】:2020-05-14 19:25:47
【问题描述】:
我有一个数据库表,我们称它为 USERS。在此表中,我有标准字段,例如 name、surname、age 等。
此表映射到 JPA 实体类:
@Entity
@Table(name = "users")
public class User {
@Id
@Column(name = "login")
private String id;
@Column(name = "name")
private String name;
//etc...
}
现在我需要有可能根据环境过滤一些用户。可以基于 Spring 活动配置文件定义环境。
我的假设是添加新的 DB 列,比如说boolean filter,并根据 Spring 配置文件过滤或不过滤用户。
问题是关于实现此功能的最佳方式,以便它干净且可维护。
一种方法是拥有两个不同的@Repository,并根据配置文件初始化正确的一个。一个存储库将返回所有用户,而另一个存储库将仅返回具有filter=false 的用户。
我不喜欢这个实现的地方是会有很多代码重复。对于每个存储库方法,我必须在第二个存储库中使用相同的方法,但基于一列进行过滤。有没有办法为给定数据库实体上的每个读取查询自动定义某种“拦截器”?
【问题讨论】:
-
可能被误解了,但我不相信额外的列会是一个好的解决方案。它只会从您的数据库中占用更多内存,并使您的数据与服务环境紧密耦合。
-
@Nobody 我很乐意考虑任何其他解决方案。我不认为我的解决方案是最好的,因此我将不胜感激可以提供的任何其他解决方案
标签: java spring hibernate spring-boot spring-data-jpa