元模型和 Persistence.xml 文件

Metamodel and the Persistence.xml file

我是 Spring 框架的新手,正在尝试为 sql 数据库创建动态搜索查询 - 类似于以下线程中描述的内容。

Filtering database rows with spring-data-jpa and spring-mvc

此线程提供了有用的指南,但是我在生成描述的元模型文件时遇到了问题。我知道这是一个常见问题,我已尝试实施在线可用的解决方案,但它们没有奏效。

我在理解 Persistence.xml 文件的概念以及在哪里找到它时遇到了特别的问题。从我读到的内容来看,它的功能似乎与我的 'application.properties 文件非常相似。 Persistence.xml 文件显然是生成元模型所必需的。我找到了以下关于它的位置的答案,但老实说我也不太明白。

“需要驻留在 Java 类路径根目录中的 META-INF 文件夹” “持久性。xml 应该位于 WAR 文件的 WEB-INF/classes/META-INF 目录中”

我正在 Eclipse 中处理一个 maven 项目,我能找到的唯一 META-INF 目录在 'Maven Dependencies' 中的 jar 文件中 如果“persistence.xml”文件是自动的生成还是我需要自己创建?如果有,在哪里?我已经添加了一个插件来生成它,但它没有用。

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <archive>
                        <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
                    </archive>
                </configuration>
            </plugin>

我也担心我可能没有对项目应用正确的更改 'Properties'。我已启用 'annotation processing' 并将 'generated test source dictionary' 设置为默认值“.apt_generated”。这样可以吗,还是我应该将生成的测试源字典命名为其他名称?

我已将推荐的依赖添加到我的 pom 文件中-

<dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-jpamodelgen</artifactId>
            <version>5.6.2.Final</version>
        </dependency>

以及以下插件:

<plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <version>1.3</version>
                <executions>
                    <execution>
                        <id>add-source</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>add-source</goal>
                        </goals>
                        <configuration>
                            <sources>
                                <source>target/metamodel</source>
                            </sources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

当我尝试 rebuild/run 项目时,它像以前一样运行,控制台中没有显示任何错误,也没有生成新的元模型 类(_files 仍然无法识别)

请参阅下面我的 pom.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.6</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.bron</groupId>
    <artifactId>demoJPA</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demoJPA</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>

        <!-- Spring JPA -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <version>2.5.6</version>

        </dependency>
        <dependency>
            <!-- Spring starter web -->

            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>





        <!-- E-mail sending capabilities -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
            <version>2.2.0.RELEASE</version>
        </dependency>


        <!-- Connect to mySQL database -->
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <scope>runtime</scope>
        </dependency>



        <!-- Connect to mySQL database -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.27</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>2.5.6</version>
            <scope>test</scope>
        </dependency>

        <!--Reduce boiler plate code -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>


        <!--Spring security -->
        <dependency>
            <groupId>org.springframework.security.oauth.boot</groupId>
            <artifactId>spring-security-oauth2-autoconfigure</artifactId>
            <version>2.5.5</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.security.experimental</groupId>
            <artifactId>spring-security-oauth2-authorization-server</artifactId>
            <version>0.1.2</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-thymeleaf -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
            <version>2.5.6</version>
        </dependency>



        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <version>2.6.0</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-jpamodelgen</artifactId>
            <version>5.6.2.Final</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>


            <plugin>
                <groupId>org.bsc.maven</groupId>
                <artifactId>maven-processor-plugin</artifactId>
                <executions>
                    <execution>
                        <id>process</id>
                        <goals>
                            <goal>process</goal>
                        </goals>
                        <phase>generate-sources</phase>
                        <configuration>
                            <!-- source output directory -->
                            <outputDirectory>target/metamodel</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <compilerArgument>-proc:none</compilerArgument>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <version>1.3</version>
                <executions>
                    <execution>
                        <id>add-source</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>add-source</goal>
                        </goals>
                        <configuration>
                            <sources>
                                <source>target/metamodel</source>
                            </sources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <archive>
                        <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
                    </archive>
                </configuration>
            </plugin>
        </plugins>



    </build>





</project>

因为我是 Spring 的新手,而且总体来说是复杂的框架,所以我发现我读过的解决方案很难理解并应用到我的项目中。非常感谢任何帮助!

  1. persistence.xml 应该在 src/main/resources/META-INF/ 中,如果该路径的任何文件夹不存在,您必须自己创建它们,也必须创建 /使用您想要的配置将 persistence.xml 文件复制到该目录中。

  2. 元模型生成应该可以工作,但我不熟悉你用来添加源的插件,我可以给你一个我知道它工作的 pom 除外:

  3. 元模型 类 应该在使用 mvn install (mvn clean install) 时生成,确保你使用 maven 安装你的项目来生成类似的东西,使用 IDE 运行 / build 命令很可能不起作用,因为它对 pom 没有任何作用。

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.6.0</version>
  <executions>
    <execution>
      <goals>
        <goal>java</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <arguments>
      <argument>--output</argument>
      <argument>target/generated-sources/</argument>
    </arguments>
  </configuration>
</plugin>
  1. 您使用的 maven-jar-plugin 让我有点困惑,因为我认为您要创建一个 Web 应用程序,所以应该生成一个 war 文件。您可以通过简单地在 <project> 下的 pom 中的任何位置添加 <packaging>war</packaging> 来做到这一点(例如在您的 <artifactId> 下)