2016-06-09 50 views
1

在我的项目中,我必须实现多租户功能(针对每个客户)。 这个想法是在每个实体中存储一个属性(customer_id)用于分隔。Spring-JPA:一般地扩展JPA查询

要获取某个客户的数据,我需要使用此属性扩展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

我怀疑JPA阿比也不休眠或任何其他ORM框架提供这样的特征。这将很难使用。由于customer_id不是一个常量,你怎么才能把正确的价值?你怎么知道哪些查询应该改变,哪些不改变?

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

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

+0

尽管海报要求提供JPA,但这不是JPA,那么也许应该使用JPA Criteria重写您的内容? –

+0

对不起,也许这是误解。但我的意思是不要直接使用SQL。使用JPA以隐藏方式注入customer_id。 – chokdee