启动时的 JPA 自定义脚本

Posted

技术标签:

【中文标题】启动时的 JPA 自定义脚本【英文标题】:JPA custom script at startup 【发布时间】:2009-10-26 16:22:24 【问题描述】:

在应用程序启动/关闭时填充使用 jpa 创建的表的最佳方法是什么? 喜欢但使用数据操作语言而不是数据定义语言。 我正在使用 HibernatePersistence 作为持久性提供程序。

【问题讨论】:

【参考方案1】:

如果您也使用 spring,那么this answer 将起作用。

如果您不使用 Spring,则必须手动运行 DDL 代码。注意Hibernate对修改数据库的支持有限(基本上只能创建表)。因此,如果您需要其他任何内容,则必须使用自定义 SQL。

[编辑] 如果您不使用 Spring,那么您可以找到一种方法来获取 Hibernate Session。调用允许运行任意 SQL 的doWork() 方法。

另一种方法是创建域对象并将它们持久化。不过,我更喜欢第一种方法,因为您可以通过这种方式固定生成对象的 ID,并使用 JPA 接口执行其他更复杂的事情。

如果您不想编写大量 insert 语句,然后将数据插入数据库并使用 SQL 工具(如 SquirrelSQL)将其导出,该工具可以为您创建 insert 语句。将它们放入一个额外的文件中,在启动时读取文件,将其拆分为; 并执行每个部分。

【讨论】:

我相信 OP 是在询问用数据填充表,而不是更改数据库架构。 好的,现在我使用的是在创建数据库后加载的外部 sql 文件。【参考方案2】:

解决了默认包中的 import.sql 并选择“create”作为 hibernate.hbm2ddl.auto 值。 Hibernate 还支持hibernate.hbm2ddl.import_files 属性。

【讨论】:

听起来很有用,您有找到此信息的文档的链接吗? 这里:docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/… CTRL-F for "hibernate.hbm2ddl.import_files"【参考方案3】:

我认为用低级 sql 插入语句填充表不是最佳选择,因为您应该手动处理外键并使用代码重构这些语句。

由于您已经有了对象模型和 ORM,另一个更可移植的解决方案是使用您的对象定义您的初始化数据,并让 JPA 提供者持久保存它们。虽然这个解决方案可能看起来很麻烦,但使用像 this 这样的项目会更合理。

【讨论】:

【参考方案4】:

出于测试目的,我使用了一个简单的 groovy 脚本和来自 org.codehaus.groovy.maven 的 gmaven-plugin。 gmaven-plugin 执行 groovy 脚本,该脚本在 generate-test-resources maven 生命周期中创建 import.sql。在脚本中使用循环和计数器比手动输入填充了插入语句的文件要好得多。这当然需要您对 hbm2ddl 内容进行排序,因为看起来您已经从以前的更新和答案中弄清楚了。

【讨论】:

以上是关于启动时的 JPA 自定义脚本的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu20.04开机运行自定义脚本

如何将自己自定义的脚本文件设置为开机自启动

如何将自己自定义的脚本文件设置为开机自启动

如何将自己自定义的脚本文件设置为开机自启动

树莓派进阶之路 (033) - 开机启动自定义脚本

自定义 Spring Boot 启动脚本