继承所有存储库方法的 Spring Data JPA 全局过滤器子句
Posted
技术标签:
【中文标题】继承所有存储库方法的 Spring Data JPA 全局过滤器子句【英文标题】:Spring Data JPA global filter clause which inherits for all repository methods 【发布时间】:2017-09-01 22:07:07 【问题描述】:我们正在使用 Spring boot + Spring data JPA 和 hibernate 开发一个多租户 Web 应用程序。
多租户是通过组织表实现的,该表作为外键连接到几乎每个表。这意味着每个数据库调用(Spring 数据存储库查询方法)都必须使用组织 ID 检查。
我需要一种方法,即“where organization_id =?”检查是否为每个查询方法自动注入。这样开发人员就不必专门为组织 ID 检查而烦恼。
这可以通过 Spring Data JPA 框架实现吗?这种方法的优缺点是什么?
感谢您的宝贵时间。
【问题讨论】:
Reading from multiple Db's with same Persistence Unit?的可能重复 我不认为它是重复的。我也想知道一种方法来做这样的事情,但没有成熟的多韧度。 同意罗伯特。这不是多个数据库。它是具有相同持久性单元的相同 Db。有什么建议可以实现这一目标? 【参考方案1】:如果你有一个基类,比如 BaseEntity,你可以使用@org.hibernate.annotations.Filter:
在 BaseEntity 中:
@FilterDef(name = "organizationFilter", parameters = @ParamDef( name="orgId", type="long" )) @Filter(name = "organizationFilter", condition = "lang_id=:orgId")
在会话初始化时(覆盖 JpaTransactionManager.createEntityManagerForTransaction()?):
session.enableFilter("organizationFilter").setParameter("orgId", organization.getId());
【讨论】:
以上是关于继承所有存储库方法的 Spring Data JPA 全局过滤器子句的主要内容,如果未能解决你的问题,请参考以下文章
如何记录 Spring Data JPA 存储库方法执行时间?