JPA 2.1 不生成模式脚本
Posted
技术标签:
【中文标题】JPA 2.1 不生成模式脚本【英文标题】:JPA 2.1 is not generating schema scripts 【发布时间】:2016-06-27 15:47:56 【问题描述】:我使用 Hibernate 启动了 JPA 2.1,并在我的 persistence.xml 中有以下几行
<property name="javax.persistence.schema-generation.scripts.action" value="drop-and-create"/>
<property name="javax.persistence.schema-generation.scripts.create-target" value="META-INF/sampleCreate.ddl"/>
<property name="javax.persistence.schema-generation.scripts.drop-target" value="META-INF/sampleDrop.ddl"/>
这些表被生成到我的 postgres 数据库中。
但是,我的 META-INF 文件夹中没有 sampleCreate.dll,也没有错误。
这里缺少什么?是否生成到其他文件夹?
谢谢。
【问题讨论】:
persistence xml 看起来是正确的。我认为问题在于路径值。你能检查在 META-INF 之前添加 / 像 /META-INF/sampleCreate.ddl @TanviB 仍然没有出现。是否假设将 sampleCreate.ddl 生成到我的项目文件夹或其他文件夹中?如果我有所以,我找到了解决方案,它不是完整的解决方案。
但还是这样。
首先,我使用的是Wildfly 10.1.0
我遇到了同样的问题,我没有看到我生成的 sql 文件。
但是经过一些实验我发现,当 Wildfly 部署我的应用程序时,它会在其 bin 目录 (C:\wildfly\bin\
) 中生成 sql 文件。
但我想在我的项目源文件夹中看到它们。
为此,您应该使用 ABSOLUTE 路径。 像下面这样(它对我有用):
<property name="javax.persistence.schema-generation.scripts.action" value="drop-and-create"/>
<property name="javax.persistence.schema-generation.scripts.create-target" value="D:/myproject/src/resources/META-INF/sampleCreate.ddl"/>
<property name="javax.persistence.schema-generation.scripts.drop-target" value="D:/myproject/src/resources/META-INF/sampleDrop.ddl"/>
但是如果你在命令中编写代码,这不方便......
它如何与 Glassfish、SpringBoot 等配合使用。我不知道,但我认为它是一样的。
【讨论】:
【参考方案2】:根据我的测试,这些文件是相对于您的 CWD(当前工作目录)创建的。
您可以通过执行以下操作来打印或记录System.getProperty("user.dir")
系统属性来查看此信息:
Getting the Current Working Directory in Java
我使用的是 maven,所以如果我使用 create.ddl
的路径执行 mvn test
,我的脚本将在我运行 maven 的同一目录中创建。
要查找您的当前目录,请记录或打印 CWD 并相应地调整您的属性值。你也可以使用相对路径,所以如果我想把我的放在target/META-INF
目录中,我会使用./target/META-INF/create.ddl
,因为那是相对于我的 CWD 的有效目录。
【讨论】:
以上是关于JPA 2.1 不生成模式脚本的主要内容,如果未能解决你的问题,请参考以下文章