【问题标题】:Hibernate: two datasources to initialise single objectHibernate:两个数据源来初始化单个对象
【发布时间】:2012-07-19 09:35:33
【问题描述】:

我有两个单独的数据库模式(或者用 Oracle 的术语来说是 2 个用户的表)- schemaA 和 schemaB。

schemaA,在其他表中,有表:

domain(id NUMBER PK, description(VARCHAR2(10))

schemaB 有表:

q_user(id NUMBER PK, username VARCHAR2(8) NOT NULL, domain_id NUMBER, CONSTRAINT foreign key references schemaA.domain(id))

Java 类 QUser 具有以下属性: Long id, String username, Domain domain

问题:是否可以将 Hibernate 配置为使用两个不同的数据源(schemaA 和 schemaB)初始化 QUser 对象?如果是这样,我该怎么做?

我也在使用 Spring 3、Hibernate 3.6 和 Oracle 10g。

我遇到了定义多个数据源并动态交换它们的 Spring 技术,但我不确定这是否可用于初始化单个对象。

任何帮助表示赞赏。 谢谢

【问题讨论】:

    标签: oracle spring hibernate datasource


    【解决方案1】:

    在您的域映射中,您也可以输入架构名称。

    使用 XML:

    <class name="Domain" table="domain" catalog="schemaA">
    

    带注释:

    @Table(name = "domain", schema = "schemaA")
    

    然后,您不需要多个数据源。您设置了一个 single 数据源,该数据源使用 schemaB 用户进行连接(因为在 schemaB 表中您有权访问 schemaA 表 - 因此是外键)。

    【讨论】:

    • 谢谢!这看起来不错,但为了保持问题清晰,我将域与用户的关系保持为 1 对 1,但在现实生活中我有多对多。所以,我在中间的 user_domain(user_id NUMBER,domain_id NUMBER)中有这个交集表。当我尝试将架构(或目录)添加到域模型类时,我得到 - 没有这样的表或视图错误。当我查看生成的 sql 时,它不会将架构应用于“... from Domain ...”中的域(应该是 schemaA.Domain)。我想这种多对多关系是另一种情况——你能指出我正确的方向吗?非常感谢
    • @damo_inc 您使用的是 XML 还是注释?我重新检查了,XML 中也有一个模式属性。
    • 我正在使用注释。我设法通过在其他模式的表上创建同义词来修复它。幸运的是,我对这两种模式都有完全的 sys 访问权限:)。非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2016-10-04
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 2013-09-21
    • 2022-06-14
    • 2013-10-12
    相关资源
    最近更新 更多