小编典典

Hibernate:在同一应用程序中使用两个不同的数据库模式

hibernate

语境

我正在创建一个数据库环境,在该环境中,我想以几种不同的模式拆分数据以用于不同的用户组。但是,由于其中一个数据库包含公共实体,因此应该共享给所有人。

假设数据库:

  • DB1-通用实体;
    • 车轮实体
  • DB2-组“ A”;
    • 汽车实体
  • DB3-组“ B”;
    • 摩托车实体

我有三个不同的项目:

  • 项目1:
    • 车轮豆
  • 专案2:
    • 汽车制造商
  • 专案3:
    • 摩托车构造者

问题

我正在尝试从项目/方案(2,“ A”)和(3,“ B”)访问轮子(Project 1)

第一个问题:可能吗?第二:我该怎么做?

hibernate.cfg.xml 在项目2中配置为

<property name="hibernate.connection.url">jdbc:mysql://99.999.999.99:3306/DB2</property>

这必然必须限制所有与DB2的连接,或者还有另一种添加新连接或与3306端口中的所有数据库或至少与DB1一起使用的方法?

项目2中的 project1映射实体似乎也没有成功,例如:

<mapping class="com.company.project1.Wheels"
        package="com.company.project1.Wheels" resource="com/company/project1/Wheels.hbm.xml"/>

组态

  • solar eclipse
  • MySQL 5.5
  • Hibernate 3.0(通过xml而不是注释进行映射)
  • win7

感谢您的帮助!


阅读 241

收藏
2020-06-20

共1个答案

小编典典

您可以@Table(catalog="")用来指定它们所属的数据库,然后还可以跨数据库建立关系。

您的情况下Wheel,使用商品目录属性映射到DB1,CarDB2和MotorCycleDB3。

我已经将此解决方案与MySQL和MSSQL一起使用,并且工作正常。唯一的限制是,这三个数据库必须位于同一数据库服务器中,并且用于访问数据库的用户应具有对所有数据库的适当权限。

由于此解决方案仅在所有查询中针对表添加架构名称。

2020-06-20