首页 > 解决方案 > 自定义 QType 以缩短路径

问题描述

我想定制一个 QType/Query 来缩短关系。

public class Foo {
   private FooBar fooBar;
}

public class FooBar{
   private Bar bar;
}

public class Bar{
   private String name;
}

目前搜索总是 foo.fooBar.bar.name。我想指定一个缩短的路径,以便 foo.bar.name 可以直接使用。是否可以直接在 QFoo 中自定义关系?

构建步骤

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

注意:使用另一个包中的 QueryEntity,它可以与 Eclipse Linkplugin 一起正常工作

标签: querydsl

解决方案


您可以为此使用委托方法(https://querydsl.com/static/querydsl/4.4.0/reference/html_single/#d0e2479)。

它们的工作方式如下:

Foo中,声明一个委托方法:

@QueryDelegate(Foo.class)
public static StringPath name(QFoo foo) {
    return foo.bar.name;
}

现在QFoo将使用生成路径的name()方法生成。foo.bar.name


推荐阅读