提问者:小点点

Spring Data JPA:一般地扩展JPA查询[重复]


在我的项目中,我必须实现多租户功能(针对每个客户)。这个想法是在每个实体中存储一个属性(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)吗?

谢谢乔克迪


共1个答案

匿名用户

我怀疑JPA Api或Hibernate或任何其他ORM框架是否提供了这样的特性。会很难用。既然customer_id不是一个常量,那么如何输入正确的值呢?您如何知道哪些查询应该更改,哪些不应该更改?

更糟糕的是,在我看来,这将是丹格乌尔。以隐藏方式更改查询可能允许 SQL 注入。

可以重写API中的某个方法来添加所需的新子句,但这似乎不是一个好主意。我认为创建普通选择查询、尽可能少地更改代码的正确方法是使用Criteria和Predicate接口。