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

时间:2014-01-16 13:01:26

标签: hibernate

我在两个数据库中有相同的表集。但是这个特定的表有不同的列,因为有一些法律约束。那么如何使用相同的.hbm,pojo类在两种不同的表中使用相同的代码进行更新。而不是2会议工厂将解决问题。因为我的问题不是连接到2 dbs。但是处理CRUD操作。

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

让我们说EMPLOYEE

 In DB1

NAME 
ADDRESS
DEPT
AGE
QUALIFICATION
EXPERIENCE 

在DB2中

NAME 
ADDRESS
DEPT
是的。那么如何处理Hibernate操作。

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

问题与连接两个数据库无关。

1 个答案:

答案 0 :(得分:2)

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的示例,最方便的解决方案是在数据库级别,方法是通过public synonyms使一个模式的表在另一个模式中可见。

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

在这种情况下,在不同的orm.xml文件中设置模式名称,并将构建过程配置为根据环境仅将其中一个文件放入类路径中,请参阅此answer