簡體   English   中英

Spring Data JPA QueryDSL

[英]Spring Data JPA QueryDSL

我正在嘗試創建一個使用 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 “No primary or default constructor found for interface 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 但我必須有一個等效的。

在讓它工作之前,你必須記住一些事情。

  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來支持來自 Web 請求的@EnableSpringDataWebSupport來啟用 Spring 數據 Web 支持。

  2. Pradicate提供元信息以便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"
    }
]

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM