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

Ale*_*lex 3 java mysql eclipse hibernate

语境

我正在创建一个数据库环境,我想在其中拆分多个不同模式中的数据以供不同的用户组使用。但是,这些数据库之一应该共享给所有人,因为它包含公共实体。

假设数据库:

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

我有三个不同的项目:

  • 项目一:
    • 轮子豆
  • 项目2:
    • 汽车制造商
  • 项目3:
    • 摩托车构造器

问题

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

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

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

<property name="hibernate.connection.url">jdbc:mysql://99.999.999.99:3306/DB2</property>
Run Code Online (Sandbox Code Playgroud)

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

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

<mapping class="com.company.project1.Wheels"
        package="com.company.project1.Wheels" resource="com/company/project1/Wheels.hbm.xml"/>
Run Code Online (Sandbox Code Playgroud)

配置

  • 日蚀靛蓝
  • mysql 5.5
  • Hibernate 3.0(通过 xml 映射而不是注解)
  • 赢7

感谢您的帮助!

Jig*_*ekh 5

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

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

我已将此解决方案与 MySQL 和 MSSQL 一起使用,并且运行良好。唯一的约束是所有三个数据库都必须在同一个数据库服务器中,并且用于访问数据库的用户应该对所有数据库具有适当的权限。

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