我有一个带有实体的现有应用程序,例如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使用继承。
---解决方法---
要动态启用或禁用多态查询,我使用了两个不同的会话工厂。
如果有人知道更好的解决方案,请帮助我以更好的方式解决此问题。
答案 0 :(得分:0)
您可以使用继承的类/实体。由于我不知道您的确切用例,因此建议您检查以下注释关键字:
以下是有关它们之间差异的说明:@MappedSuperclass vs. @Inheritance