我在两个数据库中有相同的表集。但是这个特定的表有不同的列,因为有一些法律约束。那么如何使用相同的.hbm,pojo类在两种不同的表中使用相同的代码进行更新。而不是2会议工厂将解决问题。因为我的问题不是连接到2 dbs。但是处理CRUD操作。
我在两个数据库中有一个表。
让我们说EMPLOYEE
In DB1
NAME
ADDRESS
DEPT
AGE
QUALIFICATION
EXPERIENCE
在DB2中
NAME
ADDRESS
DEPT
是的。那么如何处理Hibernate操作。
注意:我无法更改数据库。
问题与连接两个数据库无关。
答案 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。