【问题标题】:Java Records - QueryDSLJava 记录 - QueryDSL
【发布时间】: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


【解决方案1】:

最新的 Querydsl APT 5.0.0 支持记录。见#2798 - Java Record support

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-04
    • 2015-02-26
    • 1970-01-01
    • 2018-09-10
    • 2019-03-22
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    相关资源
    最近更新 更多