如何使用hibernate / jpa注释将一个类映射到不同的表
我目前陷入了一个似乎非常简单的问题,但我似乎无法找到解决办法:
我有2个相同的表:
- tbl_creditcard_approved_txns
- tbl_creditcard_declined_txns
两者中的字段是相同的,我有一个类 – 用于表示表中所有适当字段的Transaction
。
我正在尝试将两个不同的实体(每个表一个)映射到上面的类。 在旧世界中,我已经创建了两个hbm.xml
文件,每个表对应一个表并将它们映射到Transaction
。 然后,我将在持久性期间使用实体名称,以确保对象在正确的表中持久化,具体取决于具体情况。
我正在尝试使用当前的注释来实现相同的目标但到目前为止在将2个实体映射到单个类时没有运气。 这有可能吗?
我目前正在使用不同的方法,因为我已经将所有公共字段(相同的列名称)提取到@MappedSuperClass
并且已经创建了两个单独的类(每个实体一个)从超类扩展(这些类只有具有不同列名的相同字段(如果适用)。
使用@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中的两个表……我认为你不能这样做。
另一种方法是在数据库层上使用一个分区表,然后在java代码中显示一个单独的表。
这可能是一般规则,你做的智能分区越多,你的查询就越快。
- Mysql的
- 神谕
您必须使用两个不同的持久性单元或两个单独的实体。 这已在这里得到解答。
- 如果我们在spring MVC中交换@service和@repository注释会发生什么
- 自定义注释作为方法记录的拦截器
- Spring Error – java.lang.NoSuchMethodError:> org.springframework.beans.factory.annotation.InjectionMetadata。
- JAXB – 在编组XML时可以将类包含展平吗?
- Struts 2错误 – com.opensymphony.xwork2.util.logging.commons.CommonsLogger错误
- 在Hibernate中:是否可以为实体混合注释和XML配置?
- spring注释不起作用
- 如何在Struts 2中通过XML配置配置@SkipValidation
- 使用AnnotationProcessor构建Maven,解析src / main / java中的文件,并生成源代码到generate-test-sources / test-annotations