【问题标题】:Fully qualify Oracle table name in Hibernate在 Hibernate 中完全限定 Oracle 表名
【发布时间】:2018-06-21 01:09:29
【问题描述】:

我的设置: 我正在使用休眠 5 使用 Oracle JDBC 驱动程序 oracle.jdbc.driver.OracleDriver 和方言 org.hibernate.dialect.Oracle9iDialect

我的模型类如下所示:

@Entity
@Table(name = "MyModel1", catalog = "DB1")
public class MyModel1 {...}

@Entity
@Table(name = "MyModel2", catalog = "DB2")
public class MyModel2 {...}

我的问题: 我有多个模型类,它们分布在同一个数据库服务器上的不同数据库上。 我必须使用单个 DB 连接来查询我的所有模型类,所以我连接到 DB1 进行查询。 一切都会好起来的,如果 Hibernate 会生成类似的 SQL 查询

select * from DB1.MyModel1;

但事实并非如此。由于某种原因,它在没有目录的情况下进行查询,即。

select * from MyModel1;

这对 MyModel1 很好,因为我连接到 DB1,但我需要对 MyModel2 进行完全限定的查询,否则会引发异常,因为在 DB1 中找不到 MyModel2 的表。

您知道有什么方法可以欺骗 Hibernate 或 JPA 或方言使用完全限定的表名构建查询吗?

【问题讨论】:

    标签: oracle hibernate jpa jdbc


    【解决方案1】:

    对于 Oracle,您必须使用 schema 属性:

    @Entity
    @Table(name = "MyModel1", schema= "DB1")
    public class MyModel1 {...}
    
    @Entity
    @Table(name = "MyModel2", schema= "DB2")
    public class MyModel2 {...}
    

    【讨论】:

    • 如果它那么容易,我会很高兴,但事实并非如此。主要目标是支持具有单个模型类的多个数据库平台。对于 mssql,我必须这样做 @Table(name = "MyModel2", catalog="DB2", schema="dbo")` 你能想到任何其他解决方案吗?
    • 最简单的方法是,如果您不在 JPA 上进行中继,而是在数据库中为正在访问表的用户创建同义词。那么你就不需要指定架构或目录了。
    猜你喜欢
    • 1970-01-01
    • 2018-02-01
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 2014-05-28
    • 1970-01-01
    • 2013-06-21
    相关资源
    最近更新 更多