我们正在使用 Spring boot + Spring data JPA 和 hibernate 开发一个 Multi-Tenancy Web 应用程序。
Multi-Tenancy 是通过组织表实现的,该表作为外键连接到几乎每个表。这意味着每个数据库调用(Spring 数据存储库查询方法)都必须使用组织 ID 进行检查。
我需要一种方法,即“where organization_id =?”检查是否为每个查询方法自动注入(inject)。这样开发人员就不必专门为组织 ID 检查而烦恼。
这可以通过 Spring Data JPA 框架实现吗?这种方法的优缺点是什么?
谢谢你的时间。
请您参考如下方法:
如果你有一个基类,比如 BaseEntity,你可以使用@org.hibernate.annotations.Filter:
@FilterDef(name = "organizationFilter", parameters = @ParamDef( name="orgId", type="long"))
@Filter(name = "organizationFilter", condition = "lang_id=:orgId")
session.enableFilter("organizationFilter").setParameter("orgId", organization.getId());