你可以告诉hibernate或任何JPA实现为你创建方案,问题是如果你想用默认的初始记录填充表?,有这样的事吗?
对于解决方案,在应用程序启动时,您可以检查表是否为空,然后创建记录,但是我认为如果在创建方案后有一个侦听器会更合适。
你可以告诉hibernate或任何JPA实现为你创建方案,问题是如果你想用默认的初始记录填充表?,有这样的事吗?
对于解决方案,在应用程序启动时,您可以检查表是否为空,然后创建记录,但是我认为如果在创建方案后有一个侦听器会更合适。
如果您正在使用Hibernate,可以使用您的初始数据创建一个import.sql
(例如src/main/resources)文件。在应用程序启动时,文件被拾取并由Hibernate执行。
您也可以使用专门的工具预填(并清空)DB,如DBUnit或Arquillian perstistence extension。
至于原始问题 - AFAIK你只有在JPA Entity lifecycle events访问。理论上它们可以用来检查或改变表格的内容,但这是一个坏主意。
编辑:数据库播种没有可访问的JPA标准。即使是Pro JPA 2 book也建议使用JDBC设置进行种子设定。我认为你用上述工具更好。我并不知道像Eclipse Hibernate的import.sql
这样的EclipseLink的种子协助,但有some DIY advice for a similar workaround。我希望它会有所帮助。
在EclipseLink中,您可以使用SessionEventListener在持久性单元启动时接收事件。
您可以使用持久性单元属性“eclipselink.session-event-listener”设置SessionEventListener您可以使用postLogin事件填充表或执行自己的DDL。
见, http://www.eclipse.org/eclipselink/api/2.4/org/eclipse/persistence/sessions/SessionEventAdapter.html
但这不是一个JPA标准,是吗?和eclipse链接怎么样 – DrAhmedJava
@DrAhmedJava编辑答案的细节 – kostja