在我的项目中,我必须实现多租户功能(针对每个客户)。这个想法是在每个实体中存储一个属性(customer_id)以进行分离。
要获取一个客户的数据,我需要使用此属性扩展 SQL。
例子:
billRepository.findByDateAndCustomerId(date, customerId);
结果是
select * from bill where date = ? and customer_id = ?
但我想有一种方法
billRepository.findByDate(date);
结果应该和上面一样。
select * from bill where date = ? and customer_id = ?
是否有可能以通用方式(例如sql预处理器)注入customer_id?知道如何使用sping-jpa或JPA(Hibernate)吗?
谢谢乔克迪
我怀疑JPA Api或Hibernate或任何其他ORM框架是否提供了这样的特性。会很难用。既然customer_id不是一个常量,那么如何输入正确的值呢?您如何知道哪些查询应该更改,哪些不应该更改?
更糟糕的是,在我看来,这将是丹格乌尔。以隐藏方式更改查询可能允许 SQL 注入。
可以重写API中的某个方法来添加所需的新子句,但这似乎不是一个好主意。我认为创建普通选择查询、尽可能少地更改代码的正确方法是使用Criteria和Predicate接口。