【发布时间】:2022-08-08 22:45:14
【问题描述】:
我想将 Java Records 与 mongoDB 和 querydsl 一起使用。但是,querydsl APT 似乎引起了问题。当我尝试处理简单代码(一个记录和一个普通类)时:
@QueryEntity
public class TestClass implements Persistable<UUID> {
@Override
public UUID getId() {
return null;
}
@Override
public boolean isNew() {
return false;
}
}
@QueryEntity
public record TestRecord() implements Persistable<UUID> {
@Override
public UUID getId() {
return null;
}
@Override
public boolean isNew() {
return false;
}
}
结果是:
/**
* QTestClass is a Querydsl query type for TestClass
*/
@Generated(\"com.querydsl.codegen.DefaultEntitySerializer\")
public class QTestClass extends EntityPathBase<TestClass> {
private static final long serialVersionUID = -1582647675L;
public static final QTestClass testClass = new QTestClass(\"testClass\");
public final ComparablePath<java.util.UUID> id = createComparable(\"id\", java.util.UUID.class);
public final BooleanPath new$ = createBoolean(\"new\");
public QTestClass(String variable) {
super(TestClass.class, forVariable(variable));
}
public QTestClass(Path<? extends TestClass> path) {
super(path.getType(), path.getMetadata());
}
public QTestClass(PathMetadata metadata) {
super(TestClass.class, metadata);
}
}
/**
* QTestRecord is a Querydsl query type for TestRecord
*/
@Generated(\"com.querydsl.codegen.DefaultEntitySerializer\")
public class QTestRecord extends EntityPathBase<TestRecord> {
private static final long serialVersionUID = -1394409244L;
public static final QTestRecord testRecord = new QTestRecord(\"testRecord\");
public final org.springframework.data.domain.QPersistable _super = new org.springframework.data.domain.QPersistable(this);
public final ComparablePath<java.util.UUID> id = createComparable(\"id\", java.util.UUID.class);
public final BooleanPath new$ = createBoolean(\"new\");
public QTestRecord(String variable) {
super(TestRecord.class, forVariable(variable));
}
public QTestRecord(Path<TestRecord> path) {
super(path.getType(), path.getMetadata());
}
public QTestRecord(PathMetadata metadata) {
super(TestRecord.class, metadata);
}
}
但在处理过程中我收到:找不到标志由这一行引起:
public final org.springframework.data.domain.QPersistable _super = new org.springframework.data.domain.QPersistable(this);
仅在 QTestRecord 中。为什么记录和类之间有区别?非常感谢!!!
PS:查询DSL配置:
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-mongodb</artifactId>
</dependency>
.
.
.
<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/java</outputDirectory>
<processor>
com.querydsl.apt.QuerydslAnnotationProcessor
</processor>
</configuration>
</execution>
</executions>
</plugin>
-
好吧,显然是因为 Record 不是一个普通的 Class 并且 APT 还不支持它。
标签: java mongodb spring-boot spring-data querydsl