如何使用Hibernate JPA 2 Metamodel Generator?

时间:2017-06-24 14:08:42

标签: java hibernate maven jpa-2.0

当我根据http://docs.jboss.org/hibernate/stable/jpamodelgen/reference/en-US/html_single/学习Hibernate JPA 2元模型生成器时,它可以正常工作。
但是当我尝试通过运行mvn compile生成这些元模型时,它只生成了相应的类和目标文件夹中的一个奇怪的文件夹'generated-sources'如下所示,并没有在源文件夹中生成相应的java文件。 enter image description here

以下是我在pom.xml中的相关配置:

    <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <compilerArgument>-proc:none</compilerArgument>
    </configuration>
</plugin>
<plugin>
    <groupId>org.bsc.maven</groupId>
    <artifactId>maven-processor-plugin</artifactId>
    <version>3.2.0</version>
    <executions>
        <execution>
                <id>process</id>
            <goals>
                <goal>process</goal>
            </goals>
            <phase>generate-sources</phase>
            <configuration>
                <processors>
                    <processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor>
                </processors>
            </configuration>
        </execution>
    </executions>
</plugin>
</plugins>

所以,我的问题是:这是预期的行为吗?如果是的话,这是否意味着我需要在每次使用元模型之前编译代码?如果不是,我如何在源代码文件夹中生成java文件?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

  

但是当我尝试通过运行mvn compile生成这些元模型时,它只生成了相应的类和一个奇怪的文件夹&quot; generated-sources&#39;在目标文件夹中,如下所示,并没有在源文件夹中生成相应的java文件。

生成的元类的默认文件夹为${project.build.directory}/generated-sources/apt,其中${project.build.directory}默认为target。所以生成的元类应该在target/generated-sources/apt目录下(因为我可以从你的截图中猜出生成元类)。

如果要更改此行为,可以使用outputDirectory元素配置插件以将元类生成到另一个文件夹,如下所示:

<plugin>
    <groupId>org.bsc.maven</groupId>
    <artifactId>maven-processor-plugin</artifactId>
    <version>3.2.0</version>
    <executions>
        <execution>
            <id>process</id>
        <goals>
            <goal>process</goal>
        </goals>
        <phase>generate-sources</phase>
        <configuration>
            <processors>
                <processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor>
            </processors>
             <outputDirectory>${project.basedir}/generated</outputDirectory>
        </configuration>
    </execution>
</executions>

并且不要忘记将新文件夹添加到类路径中,否则您的项目可能无法构建。

  

这是预期的行为吗?

  

如果是,那么在我每次使用元模型之前是否需要编译代码?

是的,但如果您不更改或添加新实体,则可以使用已生成的类,前提是您至少运行一次mvn compile

  

如果不是,我如何在源代码文件夹中生成java文件?

我不建议这样做:-)我的意思是将生成的类与源代码混合不是一个好主意。如果您不喜欢target文件夹,请使用上述任何其他文件夹。