【问题标题】:How can I set the schema name used by hibernate entities at query time?如何在查询时设置休眠实体使用的模式名称?
【发布时间】:2008-12-29 17:55:03
【问题描述】:

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

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

【问题讨论】:

    标签: java hibernate orm


    【解决方案1】:

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

    【讨论】:

    • 我想这是互联网的危险之一。我已尽我所能更新了链接。
    【解决方案2】:

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

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

    ALTER SESSION SET CURRENT_SCHEMA = 'someotherschema'
    

    然后他们将那个连接传回来。

    所有的休眠配置都小心使用名称而不为它们指定架构。

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

    【讨论】:

    • 您认为您的解决方案可以适应在事务过程中访问多个模式的情况吗?显然,如果有 两个 模式,它就可以工作——一个是固定的,另一个取决于具体情况。不过我会联系你的。谢谢!
    • 好吧,如果您的设置很奇怪,另一种方法是为您登录的每个用户名创建 oracle 表别名。当然,这是很多管理。或者您可以结合解决方案 = 使用 CURRENT_SCHEMA 并且还具有指向其他模式的表别名的模式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多