【问题标题】:Spring Hibernate JPA - Using many schemasSpring Hibernate JPA - 使用许多模式
【发布时间】:2018-01-08 15:03:17
【问题描述】:

我工作的公司将他们的客户数据存储在每个客户的单独数据库架构中。他们表示目前无法更改。是否有一种有效的方法可以在所有模式中提取数据和更新数据,而无需为每个模式配置连接?我搜索时能找到的所有内容似乎都在谈论使用一个或几个模式,但我需要同时使用许多(100 多个)。

【问题讨论】:

标签: java spring hibernate jpa


【解决方案1】:

在任何给定的持久性上下文中,每个 JPA 实体类都映射到特定的基表。您是否以及如何轻松地通过单个 DB 连接访问多个模式取决于您的 DBMS、JDBC 驱动程序,也许还有您的特定数据库,但即使是通常支持您需要的访问类型的组合仍然不允许您可以将相同的实体类映射到同一持久性上下文中的多个不同的基表。

您可以通过将不同的持久性上下文与每个客户端相关联来为不同的客户端使用相同的实体类,但这将不允许您为所有客户端使用相同的数据库连接。因此,如果您完全可以使用相同的连接,则每个客户端都需要不同的实体类。

【讨论】:

  • 感谢您的明确回复。在这种情况下,我最好的选择是为每个客户端模式提供单独的数据库连接。您对扩展到 100 个或更多客户需要付出多少代价有任何见解吗?我还想知道以小批量生成和关闭连接是否会更好?
  • @user123959,性能问题最好通过仔细的实验​​来回答。众所周知,准确的性能预测非常困难。
【解决方案2】:

您是否考虑过创建一个新的数据库用户并为单独的数据库架构中的每个表创建 SYNONYMS ?

然后您可以将 JPA 实体映射到您创建的同义词名称..

使用这种方法,您仍然可以使用一个数据库连接,但使用 SYNONYMS 到其他模式中的数据库表...

【讨论】:

  • 从实体类到表的映射已经可以在持久性上下文配置中进行自定义,所以我看不到同义词(在支持它们的 DBMS 中)如何添加任何新内容。或许你可以澄清一下?
  • 嗨 John 没有什么需要澄清的,我只是将其视为“无需为每个架构配置连接”的便捷解决方案 ...
  • 澄清一下,同义词是否仍需要为每个架构单独的实体类?
  • 我认为您不需要单独的实体类。我认为您可以使用 HibernateInterceptor 和一些创意代码来动态引用同义词...
猜你喜欢
  • 1970-01-01
  • 2017-03-19
  • 1970-01-01
  • 2015-05-08
  • 1970-01-01
  • 2015-11-28
  • 2023-03-11
  • 2013-12-16
  • 1970-01-01
相关资源
最近更新 更多