我们有一个JSF Web应用程序,并使用JPA来管理一些持久状态。在开发过程中,我们希望每次从应用程序服务器启动时都从头开始重新创建数据库表并填充测试数据。
为此,我们在persistence.xml中有这个:
<property name="javax.persistence.schema-generation.create-source" value="metadata-then-script"/>
<property name="javax.persistence.schema-generation.create-script-source" value="file:META-INF/data_insert.sql"/>
这产生和异常,&#34;源ddl生成脚本[...]发生IO错误(系统找不到指定的文件)&#34;。
然而,使用绝对路径可以起作用:
<property name="javax.persistence.schema-generation.create-script-source" value="file:D:\Projects\Programming\Java\wapp_project\WanderWIKI\web\META-INF\data_insert.sql"/>
缺少什么?
答案 0 :(得分:1)
没有遗漏你有额外的:)删除相对路径配置中的文件:,所以:
<property name="javax.persistence.schema-generation.create-script-source" value="META-INF/data_insert.sql"/
&GT;
值中设置的位置相对于持久性单元的根目录:
以下文档可以作为参考配置https://docs.oracle.com/javaee/7/tutorial/persistence-intro005.htm
关于评论的更新
实际上,你必须提供一个绝对路径,在引用时检查JAVA API specification部分8.2.1.9属性
在外部提供脚本时(或生成模式时) 发生在脚本文件中,如下所述),对应的字符串 必须指定文件URL。在Java EE环境中,此类文件URL 规范必须是绝对路径(不是相对的)。在Java EE中 环境中,必须可以访问所有源文件和目标文件位置 到部署持久性单元的应用程序服务器
并且通过指定属性<property name="javax.persistence.schema-generation.create-source" value="metadata-then-script"/>
你的说法首先基于元数据而不是基于脚本生成模式,所以你必须绝对引用它