【问题标题】: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 或注释)映射你的表?
  • 我会选择注释
  • 看看我的回答。希望对你有帮助。

标签: java hibernate database-design


【解决方案1】:

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

或

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

更多信息:

  1. @MappedSuperclass - Java Doc Example
  2. @SecondaryTable - Java Doc Example
  3. Tutorial - Map One POJO To Multiple Tables

【讨论】:

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

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

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

【讨论】:

    猜你喜欢
    • 2022-01-23
    • 2012-04-21
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    相关资源
    最近更新 更多