8

我已经在网上阅读了几篇关于多租户(针对 SaaS 应用程序中的不同客户端)的文章(即这个那个那个)。一旦你决定采用基于鉴别器的方法,hibernate doc 指出,这在版本 4 中不受支持,但会在版本 5 中出现。

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

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

4

1 回答 1

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;
于 2014-04-07T09:10:06.247 回答