Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用hibernate用数据填充数据库表的方法_Hibernate_Jakarta Ee_Jpa_Import_Fill - Fatal编程技术网

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

使用hibernate用数据填充数据库表的方法,hibernate,jakarta-ee,jpa,import,fill,Hibernate,Jakarta Ee,Jpa,Import,Fill,我很好奇,有什么方法可以使用hibernate填充数据库表 我是Java EE初学者,只知道两种方法: 创建类的实例并通过EntityManager持久化它 使用import.sql 如果还有很多其他方法,请说明使用它们的好处 提前谢谢你 您已经大致介绍了使用的两种主要方法,因此我将为您介绍每种方法的优缺点 方法1:让Hibernate生成SQL以基于对象定义创建表: 专业人士 编写您的对象很容易,剩下的工作将由Hibernate完成 通过将SQL打印到日志中,可以获得Hibernate使用的

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

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

  • 创建类的实例并通过EntityManager持久化它
  • 使用import.sql
  • 如果还有很多其他方法,请说明使用它们的好处


    提前谢谢你

    您已经大致介绍了使用的两种主要方法,因此我将为您介绍每种方法的优缺点

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

    专业人士

    • 编写您的对象很容易,剩下的工作将由Hibernate完成
    • 通过将SQL打印到日志中,可以获得Hibernate使用的确切SQL
    • 可用于轻松设置数据库中对象之间的关系
    • 非常适合快速设置项目的后端或生成用于单元测试的数据库
    • Hibernate甚至可以生成ID序列之类的内容
    • 当您关闭应用程序时,Hibernate可以自动清理您的架构
    缺点

    • 如果您的关系在逻辑上不正确,Hibernate不会在意,它只会创建您提供给它的映射
    • 实际上不能在生产环境中使用,因为您无法控制Hibernate将生成什么。如果您在对象的数据库中出错,它将立即更改您的数据库。DBA将关注你的血液
    方法2:使用编写的SQL生成架构:

    专业人士

    • 您对模式有更多的控制,并且您确切地知道在哪里生成什么
    • 一旦您确信您的SQL模式是正确的,您就可以很容易地对对象进行反向工程以匹配SQL模式,因为Hibernate将准确地告诉您什么对象违反了什么条件
    • 在生产中使用是安全的,因为您可以将脚本交给DBA,并要求他们确保生产数据库与模式匹配
    • 当您有一个您知道有效的模式并且需要与表匹配的对象时,这是一个很好的选择
    • 当您创建一个对数据库没有控制权的系统时,这也很好
    缺点

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

    我希望这能让你了解如何在什么情况下使用这些工具。如果有人觉得我遗漏了什么,请随时发表评论。

    James,非常感谢您的回答!这正是我希望看到的(好吧,也许有更多的方法,但既然没有,也没关系:)。