Spring Data JPA QueryDSL - PullRequest
       22

Spring Data JPA QueryDSL

0 голосов
/ 03 марта 2020

Я пытаюсь создать контроллер, который использует 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;
}

Когда я вызываю API GET / playerAccount, я получаю исключение 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, но у меня должен быть эквивалент.

1 Ответ

0 голосов
/ 03 марта 2020

Вы должны иметь в виду несколько вещей, прежде чем заставить его работать.

  1. Укажите ниже зависимости для поддержки dsl запроса
<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-apt</artifactId>
</dependency>
<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-jpa</artifactId>
</dependency>
Добавить плагин 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>

Включите веб-поддержку данных Spring, указав @EnableSpringDataWebSupport в главном классе вашего приложения для поддержки querydsl из веб-запросов.

Укажите метаинформацию для Pradicate для заполнения на go

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

Теперь вы можете go сделать запрос на использование запроса dsl: GET /playerAccount должен вернуть все записи И во время вызова GET /playerAccount?name=Nick

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

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...