[英]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 但我必須有一個等效的。
在讓它工作之前,你必須記住一些事情。
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
</dependency>
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>
通過為應用程序的主類指定@EnableSpringDataWebSupport
來支持來自 Web 請求的@EnableSpringDataWebSupport
來啟用 Spring 數據 Web 支持。
為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.