【问题标题】:Hibernate/JDBC dynamic/ad hoc table generation possible?Hibernate/JDBC 动态/临时表生成可能吗?
【发布时间】:2015-03-12 05:16:41
【问题描述】:

我们有一个要求,我们希望自动解析 CSV 文件并将它们插入到表中。我们正在探索是否可以使用诸如 Hibernate 之类的 ORM 动态生成表。

例如,找到并下载了一个新的 CSV 文件,在我们的代码中,我们将解析列、创建新表并插入数据。

显然,这种方法有很多危险信号,但我们正处于弄清楚我们有哪些选择的早期阶段。

【问题讨论】:

  • 这真的取决于你需要什么,什么程度的可扩展性,数据吞吐量,基础设施,可用时间......我建议使用保持简单的策略,你建议的方法看起来不错对我来说,它只需要进一步详细并分解为您能够描述的较小任务。然后您将能够查看是否有现有的库/应用程序可以帮助您。
  • @eduardohl 谢谢。你知道是否可以在运行时创建表吗?
  • 是的,它非常可行,即使不是标准方法。如果您的表格由于 CSV 格式而往往会发生很大变化,那么使用无模式数据库是一个很好的解决方案,如下所示。

标签: hibernate jpa jdbc spring-jdbc


【解决方案1】:

Hibernate 可以从一组 JPA 注释类中自动生成模式,反之亦然。 Hibernate 的主要目标是在 Java POJO 和关系数据库之间进行映射,因此称为“对象关系映射”。如果您对表或列的编译时间一无所知,我建议您使用纯 JDBC 生成表和插入语句。如果需要支持,可以试试 Spring 的JdbcTemplate (documentation)。

如果您处于真正的绿色阶段,像mongodb 这样的文档数据库可能比关系数据库更好地解决您的问题。您不必在插入时担心列名,只需将 CSV 文件转换为 JSON(网上有几种工具可用,谷歌一下)并将结果插入到集合中。如果集合中的文档之间存在某种一致性,您当然会更轻松地查询数据。

【讨论】:

  • 感谢您的回复。我也想到了半/非结构化数据,但被告知要探索将其转储到结构化数据库中。我同意 ORM 将实体映射到表的部分,这就是为什么我对临时表的生成持怀疑态度。
  • 您知道在 mongo 中将 csv 列解析为数字或字符串的方法吗?
  • 如果您不想自己编写导入代码,mongoimport 实用程序 (docs.mongodb.org/manual/reference/program/mongoimport) 可能会提供一些帮助。如果您正在使用 Java 制作解析器,我建议您查看 Jackson 或 gson 进行解析,并使用 JsonPath 进行查询和查找(如有必要)。关于探索关系数据库替代方案,您可能会发现这篇博文很有趣:itexto.com.br/devkico/en/?p=60
猜你喜欢
  • 2016-01-20
  • 1970-01-01
  • 2011-02-07
  • 1970-01-01
  • 2023-04-04
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多