如何在查询时设置hibernate实体使用的模式名称?

时间:2008-12-29 17:55:03

标签: java hibernate orm

我们的应用程序将Hibernate用于ORM,并将数据存储在多个模式中,并通过为应用程序自定义授权的用户访问它们。

模式名称在运行时根据数据确定;将它们的名称包含在实体映射文档中是不可行的。这意味着我需要一种方法来告诉Hibernate在执行查找时使用特定的模式名称。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:3)

这是一个列出了您可以管理multiple schemas in Hibernate的方法的页面。我可能会去实现你自己的connection provider。您可能也想要禁用缓存。

答案 1 :(得分:1)

我们在工作中遇到了这个问题。正如罗伯特建议的那样,我通过创建连接提供程序(即DataSource的实现)来修复它,称为“”OracleSchemaRemappingDataSource“并使用spring来进行管道。

基本上,这个数据源实现了getConnection()。该方法的实现通过弹簧注入从其他数据源获取连接,它假定为oracle连接,然后执行

ALTER SESSION SET CURRENT_SCHEMA = 'someotherschema'

他们将这个连接传回去了。

所有hibernate配置都小心使用名称而不为它们指定模式。

另外:有了这个,你不想禁用缓存 - 允许hibernate正常管理连接,因为我们在应用程序中没有做任何魔术,比如在每个用户的基础上使用不同的连接。