我目前仍然坚持看似非常简单的问题,但我似乎无法找到解决办法:
我有2个相同的表:
两者中的字段相同,我有一个类 - Transaction
,用于表示表中的所有相应字段。
我正在尝试将两个不同的实体(每个表一个)映射到上面的类。在旧世界中,我已经创建了两个hbm.xml
个文件,每个表格一个,并将它们映射到Transaction
。然后,我会在持久性期间使用实体名称,以确保对象在正确的表中持久化,具体取决于具体情况。
我正在尝试使用当前的注释来实现相同但到目前为止在将2个实体映射到单个类时没有运气。这有可能吗?
我目前正在使用一种不同的方法,因为我已将所有公共字段(相同的列名称)提取到@MappedSuperClass
中,并创建了两个独立的类(每个实体一个)从超级扩展class(这些类只有具有不同列名的相同字段,如果适用)。
答案 0 :(得分:19)
使用@MappedSuperclass,您将按以下步骤操作:
@MappedSuperclass
public class Transaction ...
@Entity
@Table(name="tbl_creditcard_approved_txns")
public class DeclinedTransaction extends Transaction ...
@Entity
@Table(name="tbl_creditcard_declined_txns")
public class ApprovedTransaction extends Transaction ...
如果需要,使用@AttributeOverride覆盖两种类型的Transaction对象之间的列名。
更新:我看到你想要将一个@Entity映射到同一个EntityManagerFactory中的两个表......我认为你不能这样做。
答案 1 :(得分:2)
答案 2 :(得分:2)
您必须使用两个不同的持久性单元或两个单独的实体。已经回答here。