将多个表映射到单个实体

Posted

技术标签:

【中文标题】将多个表映射到单个实体【英文标题】:Mapping Multiple tables to Single Entity 【发布时间】:2015-01-07 21:14:55 【问题描述】:

我有一个数据库,其中包含每月生成的多个表。例如

Transaction_01_2014
Transaction_02_2014
Transaction_03_2014
.
.
.
Transaction_12_2014

所有表都具有相同的结构。唯一的区别是末尾附加的月份和年份。

是否可以将所有这些表映射到 Hibernate 中的单个 @Entity 类“事务”?如果是,我需要更改一些配置吗?如果这种方式不可能,我应该如何从我的 java 应用程序中以一种微妙而简单的方式对这些表进行操作?

干杯!

【问题讨论】:

你想如何用实体(XML 或注释)映射你的表? 我会选择注释 看看我的回答。希望对你有帮助。 【参考方案1】:

是的。您可以使用@MappedSuperclass 注解将多个表映射到单个@Entity 类。通过使用此注释创建一个超级并将其功能继承到 @Table 注释中具有不同表的所有子类。 但是,在这种情况下会出现标准化问题

您可以使用 @SecondaryTable 注释,它允许您指定一个或多个辅助表,指示实体类的数据存储在多个表中。

更多信息:

    @MappedSuperclass - Java Doc Example @SecondaryTable - Java Doc Example Tutorial - Map One POJO To Multiple Tables

【讨论】:

是的,完全正确...你为什么不使用单表并按月执行操作? 嘿,你可以使用@SecondaryTable 代替@MappedSuperclass 注解。我已经更新了我的答案。看看吧。 非常感谢您的建议,但我必须照原样处理 DB,并且每月有一个长达五年的表。因此,我无法创建辅助 12 X 5 表类/实体。【参考方案2】:

如果这个新实体的目的是读取而不是插入、更新和删除,例如报告和监控,那么遵循该方法可能会对您有所帮助:

    您可以创建一个联合所有这些表的数据库视图。 将新的@Entity 类映射到这些 VIEW 将解决问题。 视图的定义 (DDL) 需要由数据库作业更新 (每月生成表并排)

【讨论】:

以上是关于将多个表映射到单个实体的主要内容,如果未能解决你的问题,请参考以下文章

将两个表的多对映射映射到单个实体

使用实体框架 4.1 代码优先方法将一对一的表关系映射到单个实体

如何将多个值类型集合映射到 Hibernate 中的一个表?

Spring Boot JPA:将一个实体映射到具有相同列的多个(很多)表

如何将实体映射到包含层次结构的维度表?

Spring jdbc中多个表数据到单个bean的映射