spring 未生成查询DSL Q类型类

iezvtpos  于 2022-11-21  发布在  Spring
关注(0)|答案(5)|浏览(291)

我尝试在我的eclipse maven项目中使用QueryDSL。这些是依赖项。

<properties>
        <!-- The main class to start by executing java -jar -->
        <start-class>my.app.market.DBApp</start-class>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <querydsl.version>4.1.4</querydsl.version>
        <apt-maven-plugin.version>1.1.3</apt-maven-plugin.version>

</properties>

<dependency>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-apt</artifactId>
            <version>4.1.4</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-jpa</artifactId>
            <version>4.1.4</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.6.1</version>
        </dependency>

<build>
        <plugins>
            <plugin>
                <groupId>com.mysema.maven</groupId>
                <artifactId>apt-maven-plugin</artifactId>
                <version>1.1.3</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>process</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>target/generated-sources</outputDirectory>
                            <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

在此之后,我尝试编写查询。

@Repository
public class QueryDSLRepo {

    @PersistenceContext
    private EntityManager em;

    public ReportingParamDAO save(final ReportingParamDAO reportingParamDAO) {
        em.persist(reportingParamDAO);
        return reportingParamDAO;
    }

    public List<ReportingParamDAO> findreportingParamDAOsByIdQueryDSL(final Integer id) {
        final JPAQuery<ReportingParamDAO> query = new JPAQuery<>(em);
        final QReportingParamDAO reportingParamDAO = QReportingParamDAO.reportingParamDAO;

        return query.from(reportingParamDAO).where(reportingParamDAO.id.eq(id)).fetch();
    }

}

但我得到了错误

QReportingParamDAO cannot be resolved to a type

注意:ReportingParamDAO是一个实体类。
这意味着我的DAO的Q类型类没有生成。我不知道为什么它没有生成。我需要做其他的事情吗?我遇到了this帖子,但是用户正在处理IntelliJ,我似乎不能使它在我的情况下工作。有人能帮助我吗?谢谢!!

uurity8g

uurity8g1#

我已经用你的pom.xml测试过了。Q类是为我生成的,但是我不能从我的源代码中访问它们。问题是生成的源代码在默认情况下不在类路径上。在类路径上添加它,你就可以在源代码中使用它们了。
1.检查target/generated-sources目录,看看这些类是否真的在那里。
1.如果你把target/generated-sources添加到类路径中,你的应用程序就可以工作了。但是我认为这不是一个好主意。因为类路径中的所有文件都将被IDE索引,你的IDE会变慢。generated-sources文件夹中的所有文件都不需要索引。所以把target/generated-sources/java添加到类路径中,并把你的query-dsl插件生成的Q类改为target/generated-sources/java

ki1q1bka

ki1q1bka2#

我最近也有同样的问题一直困扰着你。
看起来apt-maven-plugin不喜欢空的.java文件。如果你的项目中有一个空的. java文件,他将不会生成任何类,除非有关于空文件的指示,这可能很难找到。

b4lqfgs4

b4lqfgs43#

在我的例子中,导致错误的是Java 14(预览特性)中的""" multiline string """语法。
我用mvn clean compile -e算出的。

6psbrbz9

6psbrbz94#

为了解决这个问题,我把插件com.mysema.maven放在插件org.codehaus.mojo之前,这使得生成的源代码被放在正确的文件夹中,并被intelijj识别。例如:

...

        <plugin>
            <groupId>com.mysema.maven</groupId>
            <artifactId>apt-maven-plugin</artifactId>
            <version>1.1.3</version>
            <executions>
                <execution>
                    <goals>
                        <goal>process</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${basedir}/target/generated-sources</outputDirectory>
                        <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
                    </configuration>
                </execution>
            </executions>
        </plugin>

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>${build.helper.maven.version}</version>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>add-source</goal>
                    </goals>
                    <configuration>
                        <sources>
                            <source>target/generated-sources</source>
                        </sources>
                    </configuration>
                </execution>
            </executions>
        </plugin>

        ....

    </plugins>
</build>
ivqmmu1c

ivqmmu1c5#

注意:我正在使用IntelliJ

我在生成文件(Q类)时遇到了麻烦,结果发现使用IntelliJ构建Maven项目是行不通的,所以我不得不在命令行中运行以下命令来构建项目:

./mvnw install

这些文件是为我生成的,为了能够在我的源代码中使用这些生成的文件,我必须将包含这些文件的文件夹标记为“Generated Sources Root”,因此在本例中导航到以下路径:

target/generated-sources/java

右键单击java文件夹--〉将目录标记为--〉生成的源文件根目录。
在此之后,您将能够在源代码中导入这些Q类。

相关问题