Spring Data JPA 全局过滤器子句,可继承所有存储库方法

4
我们正在使用Spring Boot + Spring Data JPA与Hibernate开发多租户Web应用程序。
通过将一个组织表与几乎每个表作为外键连接,实现了多租户功能。这意味着每个数据库调用(Spring Data存储库查询方法)都必须检查组织ID。
我需要一种方式,能够自动注入此“where organization_id =?”检查到每个查询方法中。以便开发人员不必专门关心组织ID检查。
从Spring Data JPA框架是否可以实现此目标?这种方法的优缺点是什么?
感谢您的时间。

我不认为这是重复的。我还想知道一种不需要完整的多租户方式来实现类似的功能。 - Robert Niestroj
同意Robert的观点。这并不是多个数据库。它是具有相同持久单元的同一数据库。有什么建议可以实现这一点吗? - J4Priyan
1个回答

1
如果您有一个基类,比如BaseEntity,您可以使用@org.hibernate.annotations.Filter:
  1. 在BaseEntity中:

    @FilterDef(name = "organizationFilter", parameters = @ParamDef( name="orgId", type="long" )) @Filter(name = "organizationFilter", condition = "lang_id=:orgId")

  2. 在会话初始化时(覆盖JpaTransactionManager.createEntityManagerForTransaction()?):

    session.enableFilter("organizationFilter").setParameter("orgId", organization.getId());


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接