Hibernate表在不同的数据库中有不同的列

Hibernate表在不同的数据库中有不同的列,hibernate,Hibernate,我在两个数据库中有相同的表集。但由于一些法律约束,这个特定的表有不同的列。那么,如何在两种不同的表中使用相同的代码更新相同的.hbm、pojo类。这并不是说两个会话工厂就能解决问题。因为我的问题是无法连接到2个dbs。但是处理积垢操作 我在两个数据库中有一个表 比如说雇员 In DB1 NAME ADDRESS DEPT AGE QUALIFICATION EXPERIENCE 在DB2中 NAME ADDRESS DEPT 在那里。那么如何处理Hibernate操作 注意:我无法

我在两个数据库中有相同的表集。但由于一些法律约束,这个特定的表有不同的列。那么,如何在两种不同的表中使用相同的代码更新相同的.hbm、pojo类。这并不是说两个会话工厂就能解决问题。因为我的问题是无法连接到2个dbs。但是处理积垢操作

我在两个数据库中有一个表

比如说雇员

 In DB1

NAME 
ADDRESS
DEPT
AGE
QUALIFICATION
EXPERIENCE 
在DB2中

NAME 
ADDRESS
DEPT
在那里。那么如何处理Hibernate操作

注意:我无法更改数据库。


问题不是连接到两个数据库。

postgresql
中,使用表注释的schema属性,这可以通过联接表继承完成:

@Entity
@Table(schema = "`DB2`", name="BASE_EMPLOYEES")
@Inheritance(strategy = InheritanceType.JOINED)
public class BaseEmployee {

    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    protected Long id;

    private String name;
    private  String address;
    private  String department;

    ...
}

@Entity
@Table(schema = "`DB1`", name = "FULL_EMPLOYEES")
public class FullEmployee extends BaseEmployee {

    private Integer age;
    private String qualification;
    private String experience;

    ...

}
我已经在一个
postgresql
数据库中对此进行了测试,该配置工作正常,不需要定义多个实体管理器工厂和数据源

注意:在其他数据库中,架构名称周围可能不需要引号

如果数据库支持同义词或等效概念:

以Oracle为例,最方便的解决方案是在数据库级别,通过使一个模式的表在另一个模式中可见

如果每个环境有不同的架构名称:


在这种情况下,请在不同的orm.xml文件中设置架构名称,并根据环境配置生成过程,以便仅将其中一个文件放在类路径中,请参见此。

请详细说明要求。我不太明白你想达到或阻止什么。您是否有一个实体映射到这两个表中的任何一个?有不同的桌子的目的是什么?它是否需要是单个实体?以及您可以提供的其他相关信息。在这种情况下,您将需要2个SessionFactory。我在两个数据库中有相同的表集。但由于一些法律约束,这个特定的表有不同的列。那么,如何在两种不同的表中使用相同的代码更新相同的.hbm、pojo类。这并不是说两个会话工厂就能解决问题。因为我的问题是无法连接到2个dbs。但是处理CRUD操作。我认为使用相同的
.hbm
是不可能的,因为hibernate读取
hbm
文件以获取表结构。hbm hibernate中的任何内容都将反映在DB和DB操作中。如果我错了,请纠正我。在这种情况下,我应该使用BaseEmployee还是FullEmployee我应该使用什么标准来区分。因为我不能只依赖架构名称,因为我有3个不同阶段的代码和数据库服务器。对于某些服务,由于法律原因,您不能返回某些机密数据,因此,在查询中使用BaseEmployee。如果您需要完整数据,请查询FullEmployee。在服务层中,根据服务的业务逻辑,您总是知道您是否需要其中一个,因此您可以相应地选择并在代码中使用其中一个,对吗?如果不是,你能提供原因吗。