JPA 2.1不生成模式脚本

时间:2016-06-27 15:47:57

标签: hibernate jpa jpa-2.1 persistence.xml

我使用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,也没有错误。

这里缺少什么?是生成到其他文件夹吗?

感谢。

2 个答案:

答案 0 :(得分:1)

所以,我找到了解决方案,但这并不是完整的解决方案。

但是仍然。

首先,我使用 Wildfly 10.1.0

我遇到了同样的问题,我没有看到我生成的sql文件。 但经过一些实验,我发现当 Wildfly 部署我的应用时,它会将sql文件生成到它的bin目录(C:\wildfly\bin\)。

但我想在我的项目源文件夹中看到它们。

为此你应该使用 ABSOLUTE PATH。 如下所示(它对我有用):

<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等一起使用。我不知道,虽然我认为它是一样的。

答案 1 :(得分:0)

根据我的测试,相对于你的CWD(当前工作目录)创建文件。

您可以通过执行以下操作来查看此内容,以打印或记录System.getProperty("user.dir")系统属性:

Getting the Current Working Directory in Java

我正在使用maven,所以如果mvn test路径为create.ddl我的脚本会在同一目录中创建,我正在运行maven。

要查找当前目录,请记录或打印CWD并相应地调整属性值。你也可以使用相对路径,所以如果我想把它放在target/META-INF目录中,我会使用./target/META-INF/create.ddl,因为那是一个相对于我的CWD的有效目录。