如何使用hibernate / jpa注释将一个类映射到不同的表

时间:2010-08-17 18:51:28

标签: java hibernate orm jpa annotations

我目前仍然坚持看似非常简单的问题,但我似乎无法找到解决办法:

我有2个相同的表:

  1. tbl_creditcard_approved_txns
  2. tbl_creditcard_declined_txns
  3. 两者中的字段相同,我有一个类 - Transaction,用于表示表中的所有相应字段。

    我正在尝试将两个不同的实体(每个表一个)映射到上面的类。在旧世界中,我已经创建了两个hbm.xml个文件,每个表格一个,并将它们映射到Transaction。然后,我会在持久性期间使用实体名称,以确保对象在正确的表中持久化,具体取决于具体情况。

    我正在尝试使用当前的注释来实现相同但到目前为止在将2个实体映射到单个类时没有运气。这有可能吗?

    我目前正在使用一种不同的方法,因为我已将所有公共字段(相同的列名称)提取到@MappedSuperClass中,并创建了两个独立的类(每个实体一个)从超级扩展class(这些类只有具有不同列名的相同字段,如果适用)。

3 个答案:

答案 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)

另一种方法是在数据库层上使用一个分区表,然后在java代码中显示一个单独的表。

这可能是一般规则,你做的智能分区越多,你的查询就越快。

答案 2 :(得分:2)

您必须使用两个不同的持久性单元或两个单独的实体。已经回答here