Hibernate:使用过滤器的基于鉴别器的 Multi-Tenancy ?

标签 hibernate multi-tenant hibernate-filters

我在网上阅读了几篇关于 Multi-Tenancy (针对 SaaS 应用程序中的不同客户)的文章(即 thisthatthat)。一旦您决定采用基于鉴别器的方法,hibernate doc states ,这在版本 4 中不受支持,但会在版本 5 中出现。

不过,您可能会找到几篇关于为此目的使用 hibernate 过滤器的文章(即 thisthat)。

我想知道,如果基于过滤器的解决方案没问题,为什么在第 5 版中会有一些特殊的实现。因此:基于过滤器的解决方案的缺点是什么? (我有 read(参见 06/Dec/11 的评论)他们不适用于 find 语句。但似乎没有其他来源同意这一点。这是真的吗?)

最佳答案

基于过滤器的解决方案的一些缺点:

  • 持久化时,必须注意tenant_id,它不会自动持久化。可能可以使用@PrePersist 回调方法。
  • 方法 entityManager.find(EntityClass.class, "ID") 不考虑过滤器值
  • 必须像这样处理@OneToMany 关系:

  •      @OneToMany(cascade = CascadeType.ALL)
         @JoinColumn(name = "ARTICLE_ID")
         @Filter(name = "tenantFilter", condition = "tenant_id = :tenantId")
         private List<ArticleChild> children;
    

    关于Hibernate:使用过滤器的基于鉴别器的 Multi-Tenancy ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12894357/

    相关文章:

    multi-tenant - Multi-Tenancy 与租户共享数据

    asp.net-mvc - Windows Azure Multi-Tenancy

    scope - Google 驱动器 API 范围 : https://www. googleapis.com/auth/drive

    oracle - 如何向 Hibernate @ManyToMany 关系添加 where 子句?

    hibernate - 如何为 sessionFactory.getCurrentSession() 启用 hibernate 过滤器?

    java - 从事务中获取额外惰性集合的 .size()

    hibernate - hql 子类属性

    hibernate - java.lang.NoSuchMethodError : org. hibernate .cfg.Environment.verifyProperties

    java - 关于创建交易的 Controller 方法问题

    grails - Grails访问控制和基于用户与对象的关系过滤结果