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

有帮助吗?

解决方案 2

使用默认包中的import.sql解决并选择“创建”按钮作为hibernate.hbm2ddl.auto值。 Hibernate还支持 hibernate.hbm2ddl.import_files property。

其他提示

如果您还使用spring,那么这个答案将有效。

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

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

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

你不想写很多 insert 语句,然后将数据插入到数据库中并使用像SquirrelSQL这样的SQL工具导出它,它可以创建 insert 给你的陈述。将它们放入一个额外的文件中,在启动时读取文件,将其拆分为; 并执行每个文件。

我认为用低级sql insert语句填充表不是最好的选择,因为你应该手动处理外键并用你的代码重构这些语句。

由于您已经拥有了对象模型和ORM,另一个更便携的解决方案是使用您的对象定义您的init数据,并让JPA提供程序保留它们。虽然这个解决方案可能看起来很麻烦,但使用像这个这样的项目会让它变得更加合理。

出于测试目的,我采用了一个简单的groovy脚本和org.codehaus.groovy.maven中的gmaven-plugin。 gmaven-plugin执行groovy脚本,脚本在generate-test-resources maven生命周期中创建import.sql。在脚本中使用循环和计数器比手动输入填充了insert语句的文件要好得多。这当然要求你对hbm2ddl的东西进行排序,因为看起来你已经从之前的更新和答案中找到了它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top