JPA Scheme Listener,有这样的事吗?

时间:2012-09-11 09:41:27

标签: jpa

你可以告诉hibernate或任何JPA实现为你创建方案,问题是如果你想用默认的初始记录填充表?

对于解决方案,在应用程序启动时,您可以检查表是否为空,然后创建记录,但我认为如果在创建方案后调用了一个更合适的监听器。

2 个答案:

答案 0 :(得分:4)

如果您正在使用Hibernate,则可以使用初始数据创建import.sql(在src / main / resources中)文件。在应用程序启动时,文件由Hibernate拾取并执行。

您还可以使用专用工具预填充(并清空)数据库,例如DBUnitArquillian perstistence extension

至于原始问题 - AFAIK,您只能访问JPA中的Entity lifecycle events。从理论上讲,它们可以用来检查或改变表的内容,但这是一个坏主意。

编辑:数据库播种没有可访问的JPA标准。甚至Pro JPA 2 book建议使用JDBC设置进行种子设定。我认为你使用上述工具会更好。我不知道有任何关于EclipseLink的播种帮助,比如Hibernate的import.sql,但有some DIY advice for a similar workaround。我希望它会有所帮助。

答案 1 :(得分:1)

在EclipseLink中,您可以使用SessionEventListener在持久性单元启动时接收事件。

您可以使用持久性单元属性“eclipselink.session-event-listener”设置SessionEventListener 您可以使用postLogin事件填充表,或执行您自己的DDL。

请参阅, http://www.eclipse.org/eclipselink/api/2.4/org/eclipse/persistence/sessions/SessionEventAdapter.html