Spring Data JPA QueryDSL

问题描述 投票:-1回答:1

我正在尝试创建一个使用Spring Data QueryDSL的控制器。

我的控制器看起来像这样:

   @GetMapping("/playerAccount")
    public Iterable<PlayerAccount> getPlayerAccounts(com.querydsl.core.types.Predicate predicate) {
        return repository.findAll(predicate);
    }

我的实体(为简便起见,简称为]

@Entity
public class PlayerAccount {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
}

[当我调用GET / playerAccount API时,出现异常IllegalStateException“找不到接口com.querydsl.core.types.Predicate的主要或默认构造函数”(由org.springframework.web.method.annotation.ModelAttributeMethodProcessor# createAttribute)。

可能有什么问题?

谢谢

编辑:

我的pom.xml包含

<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-apt</artifactId>
</dependency>
<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-jpa</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</outputDirectory>
                <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
            </configuration>
        </execution>
    </executions>
</plugin>

我没有@EnableSpringDataWebSupport,但必​​须具有等效的名称。

java spring rest spring-data-jpa querydsl
1个回答
0
投票

要使其正常工作,您必须牢记一些注意事项。

  1. 在下面指定查询dsl支持的依赖项
<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-apt</artifactId>
</dependency>
<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-jpa</artifactId>
</dependency>
  1. 添加用于查询类生成的Maven插件(在您的情况下,将生成com.fully.qualified.package.name.QPlayerAccount
<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>
  1. 通过在应用程序的主类中指定@EnableSpringDataWebSupport来启用Spring数据Web支持,以支持Web请求中的querydsl。

  2. Pradicate提供元信息以随时随地填充

@GetMapping("/playerAccount")
public Iterable<PlayerAccount> getPlayerAccounts(@QuerydslPredicate(root = PlayerAccount.class) Predicate predicate) {
    return repository.findAll(predicate);
}

现在您可以提出使用查询dsl的请求了:GET /playerAccount应该返回所有记录并拨打GET /playerAccount?name=Nick

[
    {
        id: 1,
        name: "Nick"
    }
]

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.