【问题标题】:Executing a Oracle native query with container managed datasource使用容器管理的数据源执行 Oracle 本机查询
【发布时间】:2015-07-27 16:11:20
【问题描述】:

我有一个项目在 persistence.xml 中使用 JPA 的 <non-jta-datasource> 连接到容器管理的 Oracle 数据源,并且在某些时候我必须使用动态构建的本机查询。默认情况下,在 Oracle 中,我需要在表名中指定 schema 才能进行查询,但我无权访问架构名称(也不应该)。

首先,这是预期的行为吗?如果我执行SELECT * FROM TABLE,Hibernate 是否应该将其重命名为数据源参数并改为执行SELECT * FROM SCHEMA.TABLE

如果不是,有没有办法以动态方式检索模式名称?即使数据源是由 WebLogic/JBoss 管理的?

【问题讨论】:

  • 您需要查询的架构与您登录时使用的架构不同吗?您是否需要查询多个不同的模式?如果没有,您可以创建一个公共同义词。
  • oracle schema == 用于登录/连接的用户名

标签: oracle hibernate jpa datasource hibernate-native-query


【解决方案1】:

您可以执行语句alter session set current_schema=SCHEMA; 来切换对象的可见性。但这是 DDL 语句,不支持绑定变量占位符。恐怕没有JPA支持退出连接池时执行回调语句。

通常当您想从其他模式访问对象并且不想使用模式前缀时,您可以在模式中创建同义词。这是解决此类“问题”的常用方法

【讨论】:

    猜你喜欢
    • 2020-04-07
    • 2016-07-02
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多