【发布时间】:2018-11-20 10:15:13
【问题描述】:
我有一个包含实体的现有应用程序,例如员工(表 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 实体。
- 只要不需要多态查询功能,我就会使用第一个会话工厂,否则使用第二个。
如果有人知道更好的解决方案,请帮助我以更好的方式解决这个问题。
【问题讨论】:
-
你写过代码吗?如果有,请分享。
-
嗨@Christopher,我已经放置了示例代码。你能帮忙吗?