【问题标题】:Spring Data JPA: extend a JPA Query generically [duplicate]Spring Data JPA:一般扩展JPA查询[重复]
【发布时间】:2016-10-10 00:49:21
【问题描述】:

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

谢谢 窒息

【问题讨论】:

  • 最好将另一个标记为重复,因为这个比较旧;-)

标签: java spring hibernate jpa spring-data-jpa


【解决方案1】:

我怀疑 JPA Api 或 Hibernate 或任何其他 ORM 框架是否提供此类功能。使用起来会很困难。由于 customer_id 不是一个常数,你怎么能输入正确的值呢?您如何知道哪些查询应该更改,哪些不应该更改?

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

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

【讨论】:

  • 虽然发帖人要求 JPA 而这不是 JPA,所以也许用 JPA Criteria 重写你放的东西?
  • 抱歉,可能是误会了。但我的意思是不要直接使用 SQL。使用 JPA 以隐藏方式注入 customer_id。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-04
  • 2018-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多