启动时的JPA自定义脚本

时间:2009-10-26 16:22:24

标签: java sql hibernate jpa ejb-3.0

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

4 个答案:

答案 0 :(得分:3)

如果您还使用弹簧,那么this answer将起作用。

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

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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