【问题标题】:Mapping a POJO to a table dynamically in hibernate using annotations使用注解在休眠中动态地将 POJO 映射到表
【发布时间】:2012-05-09 06:59:59
【问题描述】:

在我的数据库中,我有大约 20 多个名为“a_emp_transactions”、“b_emp_transaction”等的表,其中所有表的表结构都相同。基本上这些表是根据员工的姓名来划分的。

现在我想使用 hibernate 对这些表执行 CURD 操作,但我不想为每个表创建 POJO。由于只有表名不同且结构相同,有没有办法使用单个 POJO 并使用注释根据当前员工姓名动态地将 POJO 映射到表?

【问题讨论】:

  • 注解是尽可能远离动态,在编译时固定。
  • 问题是他是否可以为不同的数据库表重用注解映射的POJO。 “动态”是指查找正确表的过程,而不是动态注释。

标签: java hibernate jpa dynamic hibernate-mapping


【解决方案1】:

我认为您的数据库架构存在很大缺陷。 为什么要使用 20 多个表,而您可能会使用 ONE 与相同的字段 + 一个“员工姓名/ID”字段?

通过这种方式,您可以将 POJO 映射到单个表,恕我直言,这将是一个更加一致的架构。

【讨论】:

  • 每个员工每周可能有数百笔交易,员工人数超过 1000 人。因此,为了使数据库操作更快,架构就是这样。无论如何都没有改变的机会。
【解决方案2】:

您可以使用 Hibernate Shards 来完成此操作。基本上,Hibernate Shards 允许您指定“分片”策略。它可以是跨不同数据库服务器的数据分布,也可以只是单独的表(看起来就是你的情况)。您当然会想要创建自己的策略,因为我不相信现有的示例会完美地涵盖您的情况:-)

http://docs.jboss.org/hibernate/stable/shards/reference/en/html/shards-shardstrategy.html

顺便说一句:我不确定 Hibernate Shards 是否允许您更改映射实体的表名(也许有可能,我只是不知道)。在任何情况下:如果不可能,您可能可以创建不同的 Hibernate 命名策略,并使用不同的命名策略来使用每个分片。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-18
    • 2011-01-20
    • 1970-01-01
    • 2010-11-22
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    相关资源
    最近更新 更多