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

Spring Boot JPA Hibernate不同的表名前缀

堵远航
2023-03-14

我正在开发一个多租户应用程序(具有旧的数据库结构),其中我有一个公共用户表和一组基于访问权限的表。

例如,如果用户可以使用不同公司C1和C2的发票,则数据库包含具有名称C1_invoice和C2_invoice的表。

我能够实现添加前缀与一家公司使用组织。冬眠靴子模型命名。物理命名策略标准

所以我可以访问C1_invoice表。但是如何动态选择前缀C1或C2呢?

共有1个答案

端木桐
2023-03-14

您可以使用这种方法的变体。

通过提供自定义的MultiTenantConnectionProvider,它基本上在Spring Data中使用了hibernate的多租户特性。连接提供程序从数据源映射中读取连接详细信息。您可以为每个数据源中的hibernate.physical_naming_strategy提供不同的值。不过,我不确定是否有办法将每个数据源的前缀指定为属性。您最终可能会为每个租户提供一个单独的物理命名策略子类。可能会很可怕。

你在用什么数据库?或者,您可以通过为每个租户提供一个模式,并使用不固定的名称将其表从默认模式中别名来解决此问题,具体如下:

CREATE SYNONYM C1.INVOICE FOR DEFAULT.C1_INVOICE;

这样,您可以使用Hibernate的标准多线程策略。模式策略。

 类似资料:
  • 问题内容: 在SQL中,将行复制到另一个(备份)表中。如果备份表具有不同的结构(或不同的列名称),这可能吗?如果没有,实现此目标的最佳方法是什么? 这是我想做的:具有columns 。我想将一些行从该表复制到另一个具有column的表。内容进入,对等 问题答案: 该 列名 不事可言,只要该 数据类型 相匹配。 如果列的数据类型不匹配,请尝试相应地强制转换值。 只需尝试 使用小的虚拟表。确保明确列出

  • 为了在我们的JUnit测试中使用H2数据库而不是调用Oracle,我被阻止在H2上创建别名以模拟一些Oracle兼容性: > 我首先为日期到字符的转换声明了to_char的别名:可以

  • 问题内容: 我正在使用一个框架(Jodd),该框架将表别名添加到SQL Select的列名称中。它看起来像格式正确的SQL,但Postgres对此感到窒息。 给出一个错误: 有没有办法让Postgres接受该SQL?我的另一种选择是破解框架,我不想这么做。 问题答案: 问题是您在列中的子句中包含了表别名。请参阅Postgres docs中的文档 : 中的列名称 。如果需要,可以使用子字段名称或数组

  • 类别表 元表 meta和cats表公共是c_id meta表cats c_id(1)meta表有2(Abhijit1,Abhijit2)行和m_id(1,2) 事务表 交易和元表通用的是m_id交易m_id 1有两行t_id(1,2)。此表主要用于支付金额和日期 我想为每个类别求和()所有成本(从元表)和金额(从事件表)。 表与 这是错的。猫的成本ID 1是300,但这里我有400 这里的总和(m

  • 我正在使用的数据库有许多具有相同列但(显然)具有不同表名的表(不是我设计的)。例如(这些是数据库表名): 有没有可能用JPA和Hibernate将这些映射到一个Java类实体?类的名称是,然后在使用它时传入例如,以便对象使用表? 还是只使用普通的、普通的Java对象来完成这样的任务更好? 谢谢你!