在Hibernate中映射2个具有相同结构的表

时间:2018-11-20 10:15:14

标签: hibernate-mapping

我有一个带有实体的现有应用程序,例如Employee(表EMP),它在多个地方使用。现在,经过很长一段时间,已经为表EMP创建了副本(EMP_ARC),我们应该在某些情况下引用它。

由于表结构完全相同,因此我想到了重用POJO声明。但是我找不到一种方法可以对两个不同的表声明重用相同的POJO。 (我已经看到了将一个POJO映射到多个表的XML映射示例,但是我们的应用程序正在使用注释,但是无法通过注释找到这样的选项)

我不能使用继承策略,因为多态查询会降低应用程序的性能,并且仅在需要时才引用EMP_ARC表。

任何人都可以告诉我创建重复的POJO并将其映射到副本表是唯一的解决方案还是其他任何方法。

**Sample Code:**

Table structure for EMP and EMP_ARC (exactly same structure)
EMP_ID LONG
EMP_NAME VARCHAR2(100)

**Existing Java Bean mapped to EMP**
**This entity bean cannot be modified**
//getter and setters omitted

@Entity
@Table(name="EMP")
public class Employee{

  @Id
  @Column(name="EMP_ID") 
  Long empid;

  @Column(name="EMP_NAME")
  String empName;
}

//Scenario 1 Query EMP table
String hql = "from Employee";

//Scenario 2 Query EMP_ARC table -- Like SELECT * FROM EMP_ARC
//Not sure of how to write the HQL using the same Employee POJO.
//Output of this HQL has to be an Employee POJO.

我也想将相同的Employee POJO映射到表EMP_ARC,但是找不到方法。

或者,如果我可以有选择地启用/禁用多态查询,那么我将能够对策略TABLE_PER_CLASS使用继承。

---解决方法---

要动态启用或禁用多态查询,我使用了两个不同的会话工厂。

  • 我有两个POJO Employee和EmployeeArc(继承Employee)。
  • 使用的继承策略是TABLE_PER_CLASS。
  • 一个会话工厂将单独引用Employee实体,而另一个会话工厂将同时拥有Employee和EmployeeArc实体。
  • 每当不需要多态查询功能时,我将使用第一个会话工厂,否则使用第二个会话工厂。

如果有人知道更好的解决方案,请帮助我以更好的方式解决此问题。

1 个答案:

答案 0 :(得分:0)

您可以使用继承的类/实体。由于我不知道您的确切用例,因此建议您检查以下注释关键字:

  1. @MappedSuperclass
  2. @继承

以下是有关它们之间差异的说明:@MappedSuperclass vs. @Inheritance