【问题标题】:Dynamic table name in HibernateHibernate 中的动态表名
【发布时间】:2010-12-22 18:12:34
【问题描述】:

我正在用 Java 开发一个使用 Hibernate 连接到 MySQL 数据库的应用程序。

我的应用程序管理不同批次的学生。如果一个学生在 2010 年加入,那么他们就在 2010 年批次中,因此每当应用程序的管理员创建一个新批次时,我的应用程序都必须为该批次创建新表。虽然该方案更像数据库中已经存在的旧表,但表名会发生变化。如何使用 Hibernate 完成此任务?

如何动态创建 XML 文件和所需的类?

【问题讨论】:

  • 检查帕斯卡的回答here
  • 您确定要创建新表吗?添加新数据时复制表只是糟糕的数据库设计。将您的设计重新考虑为更具关系的数据库方法;)
  • 这闻起来像是一个糟糕的设计。例如,为什么不能制作批次表并将批次附加到学生。
  • 您是否有理由无法将BATCH_YEAR 列添加到学生表并以这种方式批量查询某些内容?
  • 不要每批使用不同的表。这种方式会导致无穷无尽的性能问题、查询问题和数据完整性问题。通常,您不希望即时生成表格。而 70,000 X 30 只有大约 2,100,000 条记录,这是一个很小的数据库表。任何正确索引的数据库都可以轻松处理。

标签: java database hibernate


【解决方案1】:

如果我理解你的问题是正确的,我想你想检查 Hibernate Shards。请注意,这是一项高级功能,不受支持且未经真正测试(也未维护)。因此,使用它需要您自担风险。您可能需要特别注意“分片选择策略”部分:

http://docs.jboss.org/hibernate/stable/shards/reference/en/html_single/#shards-strategy-shardselection

来自文档:

我们预计许多应用程序都希望实现基于属性的分片,因此对于存储天气报告的示例应用程序,让我们按报告来源的大陆对报告进行分片

但正如其他人所说:在拆分数据之前要三思而后行。仅当您期望有大量数据时才这样做。几百万条记录并没有那么多。

【讨论】:

    猜你喜欢
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 2014-09-27
    • 2012-01-24
    • 2023-03-16
    相关资源
    最近更新 更多