Spring Data JPA:一般扩展JPA Query

时间:2016-06-09 11:29:52

标签: java spring hibernate jpa spring-data-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 = ?

是否有可能以通用方式注入customer_id(例如sql预处理器)? 有没有想过如何使用spring-jpa或JPA(休眠)?

由于 chokdee

1 个答案:

答案 0 :(得分:-1)

我怀疑JPA Api和Hibernate或任何其他ORM框架都提供了这样的功能。这将很难使用。既然customer_id不是常数,你怎么能把正确的价值放在一边?你怎么知道哪些查询应该改变哪些不改变?

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

可以从API覆盖某些方法来添加您需要的新子句,但这似乎不是一个好主意。我认为创建dinamic select查询的正确方法是尽可能少地更改代码,使用Criteria和Predicate接口。