我正在尝试在我的 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
,我似乎无法让它在我的情况下工作。有人可以帮帮我吗。谢谢!!
我已经用你的 pom.xml 进行了测试。 Q 类是为我生成的,但我无法从源代码中访问它们。问题是生成的源默认不在类路径上。将其添加到类路径中,您将能够在源代码中使用它们。
target/generated-sources/java
添加到类路径中,并将生成的 Q 类的 query-dsl 插件更改为 target/generated-sources/java
就我而言,导致错误的是 Java 14(预览功能)中的
""" multiline string """
语法。
我通过
mvn clean compile -e
弄清楚了。
我最近也遇到了同样的问题。
似乎 apt-maven-plugin 不喜欢空的 .java 文件。 如果你的项目中有一个,他不会生成任何类而不指示空文件,这可能很难找到。
为了解决这个问题,我将插件 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>
注意:我正在使用 IntelliJ
我在生成文件(Q 类)时遇到了麻烦,结果发现使用 IntelliJ 构建我的 Maven 项目不起作用,所以我必须在命令行中运行此命令来构建项目:
./mvnw install
这些文件是为我生成的,为了能够在我的源代码中使用这些生成的文件,我必须标记包含这些文件的文件夹 文件作为“生成的源根”,因此在本例中导航到此路径:
target/generated-sources/java
鼠标右键单击 java 文件夹 --> 将目录标记为 --> 生成的源根目录。
此后,您将能够在源代码中导入这些 Q 类。
我在 2024 年使用 QueryDSL 版本 5.1.0 时遇到了同样的问题,我使用包含“jakarta”的“classifier”字段解决了这个问题,如下所示:
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>${querydsl.version}</version>
<classifier>jakarta</classifier>
<scope>provided</scope>
</dependency>