使用hibernate用数据填充数据库表的方法

时间:2014-06-09 23:36:22

标签: hibernate java-ee jpa import fill

我很好奇,有什么办法,用hibernate填充数据库表。

我是Java EE初学者,只知道两种方式:

  1. 创建类的实例并通过EntityManager保存它。
  2. 使用import.sql。
  3. 如果还有很多其他方法,请提及使用它们的好处。

    提前谢谢!

1 个答案:

答案 0 :(得分:2)

你几乎已经涵盖了所使用的两种主要方法,所以我会给你各自的专业和缺点。

方法1:让Hibernate生成SQL以基于对象定义创建表:

<强>赞成

  • 容易做,写你的对象,Hibernate会做其余的事。
  • 您可以通过将SQL打印到日志中来获得Hibernate使用的确切SQL。
  • 可用于轻松设置数据库中对象之间的关系。
  • 非常适合快速设置项目的后端或生成数据库以进行单元测试。
  • Hibernate甚至可以生成ID序列等内容。
  • 关闭应用程序时,Hibernate可以自动清理架构。

<强>缺点

  • 如果您的关系在逻辑上不正确,Hibernate将无关紧要,它只会创建您提供的映射。
  • 无法在生产环境中实际使用,因为您无法控制Hibernate将生成的内容。如果你在对象中犯了错误,它会立即改变你的数据库。 DBA将会追随你的血液。

方法2:使用编写的SQL生成模式:

<强>赞成

  • 您可以更好地控制架构,并确切知道在哪里生成了什么。
  • 一旦你知道你的SQL模式是正确的,你可以很容易地对你的对象进行逆向工程以匹配SQL模式,因为Hibernate会告诉你究竟什么对象违反了什么条件。
  • 可以安全地在生产中使用,因为您可以将脚本提供给DBA并要求他们确保生产数据库与架构匹配。
  • 适用于您知道有效的架构,并且需要与您的表匹配的对象。
  • 当您创建一个无法控制数据库的系统时也很有用。

<强>缺点

  • 第一次做对的痛苦。这是一次反复试验。
  • 必须通过编写破坏脚本来清理自己。
  • 在重构表所代表的对象时,必须记住重构SQL。
  • 您必须使用Javax验证注释对对象执行空检查,或者准备好捕获一大堆ConstraintViolationException
  • Hibernate将告诉你一个对象违反了什么条件,但它将是一些模糊的无意义的约束名称。

我希望你能够了解如何使用它们以及在什么情况下使用它们。如果有人觉得我错过了什么,请随时发表评论。