我们正在使用 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:

  • 在 BaseEntity 中:

    @FilterDef(name = "organizationFilter", parameters = @ParamDef( name="orgId", type="long"))
    @Filter(name = "organizationFilter", condition = "lang_id=:orgId")
  • 在 session 初始化时(覆盖 JpaTransactionManager.createEntityManagerForTransaction()?):

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

  • 评论关闭
    IT干货网

    微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!