【问题标题】:Ways to fill a database table with data using hibernate使用hibernate用数据填充数据库表的方法
【发布时间】:2014-06-09 23:36:21
【问题描述】:

我很好奇,有什么方法可以使用休眠填充数据库表。

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

  1. 创建一个类的实例并通过 EntityManager 持久化它。
  2. 使用 import.sql。

如果还有很多其他方法,请提及使用它们的好处。

提前谢谢你!

【问题讨论】:

    标签: hibernate jakarta-ee jpa import fill


    【解决方案1】:

    您已经大致介绍了所使用的两种主要方法,所以我将分别介绍每种方法的优缺点。

    方法一:让Hibernate根据Object Definitions生成SQL创建表:

    优点

    • 操作简单,只需编写您的对象,其余的工作就交给 Hibernate。
    • 您可以通过将 SQL 漂亮地打印到日志中来获得 Hibernate 使用的确切 SQL。
    • 可用于轻松设置数据库中对象之间的关系。
    • 非常适合快速设置项目后端或生成用于单元测试的数据库。
    • Hibernate 甚至可以生成 ID 序列等内容。
    • 当您关闭应用程序时,Hibernate 可以自动清理您的架构。

    缺点

    • 如果你的关系在逻辑上不正确,Hibernate 不会在意,它只会创建你给它的映射。
    • 实际上无法在生产环境中使用,因为您无法控制 Hibernate 将生成什么。如果您在对象中犯了错误,它将立即更改您的数据库。 DBA 会为您效劳。

    方法 2:使用书面 SQL 生成架构:

    优点

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

    缺点

    • 第一次做对就很痛苦。这是一个反复试验的练习。
    • 必须自己编写销毁脚本进行清理。
    • 在重构表所代表的对象时,必须记住重构 SQL。
    • 您必须使用 Javax Validation 注解对您的对象执行空值检查,或者准备好捕获一大堆ConstraintViolationException
    • Hibernate 会告诉您对象违反了什么条件,但它会是一些晦涩无意义的约束名称。

    我希望这能让您了解如何使用它们以及在什么情况下使用它们。如果有人觉得我遗漏了什么,请随时发表评论。

    【讨论】:

    • 詹姆斯,非常感谢您的回答!这就是我希望看到的(好吧,也许还有更多方法,但既然没有,那也没关系:))。
    猜你喜欢
    • 1970-01-01
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多