你几乎已经涵盖了所使用的两种主要方法,所以我会给你各自的专业和缺点。
方法1:让Hibernate生成SQL以基于对象定义创建表:
<强>赞成强>
- 容易做,写你的对象,Hibernate会做其余的事。
- 您可以通过将SQL打印到日志中来获得Hibernate使用的确切SQL。
- 可用于轻松设置数据库中对象之间的关系。
- 非常适合快速设置项目的后端或生成数据库以进行单元测试。
- Hibernate甚至可以生成ID序列等内容。
- 关闭应用程序时,Hibernate可以自动清理架构。
<强>缺点强>
- 如果您的关系在逻辑上不正确,Hibernate将无关紧要,它只会创建您提供的映射。
- 无法在生产环境中实际使用,因为您无法控制Hibernate将生成的内容。如果你在对象中犯了错误,它会立即改变你的数据库。 DBA将会追随你的血液。
方法2:使用编写的SQL生成模式:
<强>赞成强>
- 您可以更好地控制架构,并确切知道在哪里生成了什么。
- 一旦你知道你的SQL模式是正确的,你可以很容易地对你的对象进行逆向工程以匹配SQL模式,因为Hibernate会告诉你究竟什么对象违反了什么条件。
- 可以安全地在生产中使用,因为您可以将脚本提供给DBA并要求他们确保生产数据库与架构匹配。
- 适用于您知道有效的架构,并且需要与您的表匹配的对象。
- 当您创建一个无法控制数据库的系统时也很有用。
<强>缺点强>
- 第一次做对的痛苦。这是一次反复试验。
- 必须通过编写破坏脚本来清理自己。
- 在重构表所代表的对象时,必须记住重构SQL。
- 您必须使用Javax验证注释对对象执行空检查,或者准备好捕获一大堆
ConstraintViolationException
。
- Hibernate将告诉你一个对象违反了什么条件,但它将是一些模糊的无意义的约束名称。
我希望你能够了解如何使用它们以及在什么情况下使用它们。如果有人觉得我错过了什么,请随时发表评论。