当前位置: 首页 > 知识库问答 >
问题:

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

朱兴运
2023-03-14

我已经在web上阅读了几篇关于多租户(针对SaaS应用程序中的不同客户端)的文章(即这个和那个)。一旦您决定采用基于鉴别器的方法,hibernate文档声明,版本4不支持这种方法,但将在版本5中提供。

尽管如此,您可能会找到几篇关于为此目的使用hibernate过滤器的文章(即这篇和那篇)。

我想知道,如果基于过滤器的解决方案可以的话,为什么在版本5中会有一些特殊的实现呢。因此:基于过滤器的解决方案有哪些缺点?(我读到(见2011年12月6日的评论)他们不使用find语句。但似乎没有其他来源支持这一点。这是真的吗?)

共有1个答案

端木飞
2023-03-14

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

  • 当持久化时,必须注意tenant_id,它不是自动持久化的。也许可以使用@PrePerig回调方法
  • 方法entityManager.find(EntityClass.class,"ID")没有考虑过滤器值
  • 要照顾@OneTo许多这样的关系:
     @OneToMany(cascade = CascadeType.ALL)
     @JoinColumn(name = "ARTICLE_ID")
     @Filter(name = "tenantFilter", condition = "tenant_id = :tenantId")
     private List<ArticleChild> children;
 类似资料:
  • null 如何实现:Spring Data JPA不支持全局筛选器,所以我需要添加定制Spring Data JPA存储库,该存储库可以反过来为基于鉴别器的解决方案应用全局筛选器? 到底有没有可能用Spring Data JPA+Hibernate 3实现我的需求?

  • 我有一个具体的JPA实体超类,它使用鉴别器列与映射,还有两个子类实体,它们用其他属性扩展了这个超类。 在某些情况下,我希望指定额外的鉴别器值,而不必为每个类型显式定义子类(也就是说,并不是每个“baseEntity”都指定支持子类/单独表的额外属性)。这种策略在数据库设计和Java类层次结构中都很有效,但是,Hibernate JPA不允许这样做,并抛出,因为没有映射到鉴别器的子类: 在本例中,我

  • 我们目前的开发基于多租户中的鉴别器模型。以下是我们目前正在使用的技术堆栈, Spring3.1.1。释放 Hibernate4.1.6。最终版本 我们通过在每个表中分别保留一列来维护租户id。创建会话时租户id筛选器。 示例模型类。 这是会话工厂的配置 租户基础会话工厂 示例服务类 示例DAO类 我想知道有没有一种方法可以通过这个数据库事务鉴别器模型获得spring事务支持?另一件事是,我想知道将

  • Hibernate还不支持通过判别器策略实现多租户的方法。我们正在考虑在我们的项目中实现这个策略。但是我们对一般的查询性能有些怀疑。查询性能会比单独数据库/模式方法差吗,因为在这种情况下,查询是在多个租户的单个数据模式上运行的?或者在这种情况下,除了创建索引之外,还有什么方法可以提高查询性能? 我们正在考虑采用鉴别器方法,因为最好是进行备份

  • 问题内容: 我想在一个实体上使用多个Hibernate过滤器,我尝试了所有没有失败的逻辑,Google以及Hibernate文档都对此提出了不足。我无法想象这是不可能的。(使用Java 6 Hibernate 4.1.9.final) 目前,我有这个: 我想向Testcase类添加第二个独立过滤器。我所追求的是这样的: 这是我尝试过的 我试图像这样向TestCase添加多个@FilterDefs,

  • 我的SINGLE_TAB继承Hibernate配置中出现了一个奇怪的情况,@DiscriminatorColumn似乎被忽略了,而查询总是默认返回到'dtype'列。这就像我在完全没有包含注释(默认列名为'dType')时看到的行为一样。 基本实体: 子类实体: 我还需要访问每个对象中的鉴别器值本身(postType字段)。我仍然有相同的行为,即使我移除它,所以它似乎不是原因。 当我试图通过JPA