您可以告诉 hibernate 或任何 JPA 实现为您创建方案,问题是如果您想使用默认初始记录填充表怎么办?
对于解决方案,在应用程序启动时,您可以检查表是否为空,然后创建记录,但我认为在创建方案后调用侦听器会更合适。
您可以告诉 hibernate 或任何 JPA 实现为您创建方案,问题是如果您想使用默认初始记录填充表怎么办?
对于解决方案,在应用程序启动时,您可以检查表是否为空,然后创建记录,但我认为在创建方案后调用侦听器会更合适。
如果您使用的是 Hibernate,您可以import.sql
使用您的初始数据创建一个(例如在 src/main/resources 中)文件。在应用程序启动时,文件被 Hibernate 拾取并执行。
您还可以使用专门的工具来预填充(和清空)数据库,例如DBUnit或Arquillian persistence extension。
至于最初的问题 - AFAIK 您只能访问 JPA 中的实体生命周期事件。从理论上讲,它们可用于检查或更改表的内容,但这是一个坏主意。
编辑:数据库播种没有可访问的 JPA 标准。甚至Pro JPA 2 书也建议使用 JDBC 设置进行播种。我认为您最好使用上述工具。我不知道像 Hibernate 那样对 EclipseLink 有任何播种帮助import.sql
,但是对于类似的解决方法有一些 DIY 建议。我希望它会有所帮助。
在 EclipseLink 中,您可以使用 SessionEventListener 在持久性单元启动时接收事件。
您可以使用持久性单元属性“eclipselink.session-event-listener”设置 SessionEventListener。您可以使用 postLogin 事件来填充您的表,或执行您自己的 DDL。
见, http://www.eclipse.org/eclipselink/api/2.4/org/eclipse/persistence/sessions/SessionEventAdapter.html