我们的应用程序将Hibernate用于ORM,并将数据存储在多个模式中,并通过为应用程序自定义授权的用户访问它们。
模式名称在运行时根据数据确定;将它们的名称包含在实体映射文档中是不可行的。这意味着我需要一种方法来告诉Hibernate在执行查找时使用特定的模式名称。有没有办法做到这一点?
答案 0 :(得分:3)
这是一个列出了您可以管理multiple schemas in Hibernate的方法的页面。我可能会去实现你自己的connection provider。您可能也想要禁用缓存。
答案 1 :(得分:1)
我们在工作中遇到了这个问题。正如罗伯特建议的那样,我通过创建连接提供程序(即DataSource的实现)来修复它,称为“”OracleSchemaRemappingDataSource“并使用spring来进行管道。
基本上,这个数据源实现了getConnection()。该方法的实现通过弹簧注入从其他数据源获取连接,它假定为oracle连接,然后执行
。ALTER SESSION SET CURRENT_SCHEMA = 'someotherschema'
他们将这个连接传回去了。
所有hibernate配置都小心使用名称而不为它们指定模式。
另外:有了这个,你不想禁用缓存 - 允许hibernate正常管理连接,因为我们在应用程序中没有做任何魔术,比如在每个用户的基础上使用不同的连接。