【问题标题】:Use two entity managers for one entity为一个实体使用两个实体管理器
【发布时间】:2016-02-14 22:48:54
【问题描述】:

情况如下:我有两个数据库Db1Db2,我有两个EntityManagers em1em2 定义。此外,我将实体 Person(int id, String name, Pet pet) 映射到数据库 Db1 中的表 person(id, name) 和实体 Pet( int id, String name, Person owner) 映射到数据库 db2 中的表 pets(id, name, person_id)。 Person 和 Pet 之间的关系是一个 @OneToOne 实体。在程序的某个时刻,我想做这样的事情:

PersonDAO personDAO = db1DAOFactory.getPersonDAO();
Person person = personDAO.find(100);
System.out.println(person.getPet().getName());

不可能合并两个数据库。如何告诉 Hibernate 将 EntityManager em2 用于宠物字段?在 Hibernate 中,我只使用注释,没有 xml 配置。

非常感谢!

【问题讨论】:

    标签: java hibernate entity dao entitymanager


    【解决方案1】:

    对不起,我认为你不能。问题由nakosspy回答:

    Hibernate 将为您的 HQL 或 Criteria 查询创建一个 SQL 查询,该 SQL 将通过 jdbc 发送到数据库。这意味着 hibernate 不支持您尝试执行的操作。

    但是,在某些情况下,您可以获得相同的结果。某些数据库允许您为驻留在不同数据库中的表创建别名。因此,您将能够编写连接两个表的 SQL 查询并在数据库上执行它。

    我们正在使用 DB2 做到这一点。如果你能做到这一点,这取决于你的数据库。

    我猜,如果您有两个不同的数据库(例如 DB2 和 MySQL),这是不可能的,但如果两个数据库属于同一供应商,那么也许是可以实现的。

    您应该尝试在数据库服务器的文档中找到更多信息。

    如果您想查看他的原始帖子,请查看link

    【讨论】:

      【解决方案2】:

      这取决于数据库功能。如果您使用的是 Oracle 数据库,您可以通过在数据库中创建 db 链接来实现此目的,然后通过在 oracle 数据库中创建视图或同义词来映射这些实体。检查您的数据库功能。希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2015-01-24
        • 2012-12-20
        • 1970-01-01
        • 2012-03-07
        • 2015-04-16
        • 1970-01-01
        • 1970-01-01
        • 2013-04-14
        • 1970-01-01
        相关资源
        最近更新 更多