gpt4 book ai didi

java - 如何配置 hibernate 以使用特定于上下文的连接信息?

转载 作者:行者123 更新时间:2023-11-30 05:16:43 26 4
gpt4 key购买 nike

我正在使用 Hibernate 编写一个 Java SE(注意,不是 Java EE)应用程序,并且我需要为每个执行线程提供与 Hibernate 的不同连接。这些连接必须集中在一起,并且每个连接至少具有不同的身份验证,并且可能具有不同的 JDBC URL。连接将被重新使用(可以从池化要求推断出)。

我必须重写 Hibernate/C3P0/et al 的哪些部分?这可以使用这些工具来完成吗?还是我需要编写自己的池数据源?

最佳答案

我认为最好的做法是为每个数据源创建一个 SessionFactory ,并可能使用池连接 - 这就是 eqbridges 在他的回答中建议的。

现在,Hibernate 确实有一个 ConnectionProvider 钩子(Hook),所以我想您可以编写一个实现,根据当前的执行线程将 Connection 返回到不同的数据源和一些附加参数。理论上,您可以拥有一个 SessionFactory 实例,该实例将使用由您的自定义 ConnectionProvider 实现提供的与不同数据库的不同连接。但是,一个 SessionFactory 保存相当多的数据,然后在为工作单元打开 Session 时,Hibernate 在内部使用这些数据。另外,还有一个与之相关的二级缓存。

不幸的是,面对这样的提供者,您打开的工厂和 session 将如何表现,谁也说不准。对我来说,这感觉像是一种黑客攻击,而且我怀疑它是否被认为是 SessionFactory 的可行用例。它可能会导致各种(可能是非常微妙的)错误或数据损坏。

另一方面,请务必准确测量创建多个 SessionFactories 的成本 - 它可能没有您想象的那么高。请务必将其与简单打开所需 JDBC 连接的成本进行比较。我不知道您可能会得到什么样的结果,但我认为您应该在采用更多黑客解决方案之前先确定性能。

关于java - 如何配置 hibernate 以使用特定于上下文的连接信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/783773/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com