将多个表映射到单个实体
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 中的一个表?