Hibernate:基于判别器的多租户使用过滤器?

Cha*_*mei 8 hibernate multi-tenant hibernate-filters

我看了几篇文章(即这个那个那个(在SaaS应用程序为不同的客户)关于多租户在网络上).一旦你决定采用基于鉴别器的方法,hibernate doc就说明版本4不支持这种方法,但是版本5会提供.

不过,您可能会发现一些关于为此目的使用hibernate过滤器的文章(即这个那个).

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

use*_*983 3

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

  • 持久化时,必须注意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;
Run Code Online (Sandbox Code Playgroud)