在我的项目中,我必须实现多租户功能(针对每个客户)。 我们的想法是在每个实体中存储一个属性(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 = ?
是否有可能以通用方式注入customer_id(例如sql预处理器)? 有没有想过如何使用spring-jpa或JPA(休眠)?
由于 chokdee
答案 0 :(得分:-1)
我怀疑JPA Api和Hibernate或任何其他ORM框架都提供了这样的功能。这将很难使用。既然customer_id不是常数,你怎么能把正确的价值放在一边?你怎么知道哪些查询应该改变哪些不改变?
更糟糕的是,在我看来这将是危险的。以隐藏方式更改查询可能允许SQL注入。
可以从API覆盖某些方法来添加您需要的新子句,但这似乎不是一个好主意。我认为创建dinamic select查询的正确方法是尽可能少地更改代码,使用Criteria和Predicate接口。