web-dev-qa-db-fra.com

erreur querydsl-jpa 3.7.3 lorsqu’il est utilisé avec spring-data-jpa 1.10.0

J'utilise

<groupId>com.mysema.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>3.7.3</version>

pas de problème avec

<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.9.4.RELEASE</version>

au lieu d'utiliser

<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.10.1.RELEASE</version>

sur le même code, j'ai les erreurs suivantes:

[ERROR] /C:/Prj/Java/Eclipse/Elfolab/src/main/Java/com/interlabsrl/elfolab/persistence/multiple/repository/elettroforesi/springdatajpa/LinguaRepository.Java:[13,8] cannot access com.querydsl.core.types.OrderSpecifier
  class file for com.querydsl.core.types.OrderSpecifier not found
[ERROR] /C:/Prj/Java/Eclipse/Elfolab/src/main/Java/com/interlabsrl/elfolab/controller/ricercaPaziente/RicercaPazienteController.Java:[487,33] cannot access com.querydsl.core.types.Predicate
  class file for com.querydsl.core.types.Predicate not found
[ERROR] /C:/Prj/Java/Eclipse/Elfolab/src/main/Java/com/interlabsrl/elfolab/controller/ricercaArchivio/RicercaArchivioController.Java:[74,32] no suitable constructor found for QSort(com.mysema.query.types.OrderSpecifier<Java.util.Date>)
    constructor org.springframework.data.querydsl.QSort.QSort(com.querydsl.core.types.OrderSpecifier<?>...) is not applicable
      (varargs mismatch; com.mysema.query.types.OrderSpecifier<Java.util.Date> cannot be converted to com.querydsl.core.types.OrderSpecifier<?>)
    constructor org.springframework.data.querydsl.QSort.QSort(Java.util.List<com.querydsl.core.types.OrderSpecifier<?>>) is not applicable
      (argument mismatch; com.mysema.query.types.OrderSpecifier<Java.util.Date> cannot be converted to Java.util.List<com.querydsl.core.types.OrderSpecifier<?>>)
[ERROR] /C:/Prj/Java/Eclipse/Elfolab/src/main/Java/com/interlabsrl/elfolab/controller/ricercaArchivio/RicercaArchivioController.Java:[611,31] no suitable constructor found for QSort(com.mysema.query.types.OrderSpecifier<Java.lang.String>)
    constructor org.springframework.data.querydsl.QSort.QSort(com.querydsl.core.types.OrderSpecifier<?>...) is not applicable
      (varargs mismatch; com.mysema.query.types.OrderSpecifier<Java.lang.String> cannot be converted to com.querydsl.core.types.OrderSpecifier<?>)
    constructor org.springframework.data.querydsl.QSort.QSort(Java.util.List<com.querydsl.core.types.OrderSpecifier<?>>) is not applicable
      (argument mismatch; com.mysema.query.types.OrderSpecifier<Java.lang.String> cannot be converted to Java.util.List<com.querydsl.core.types.OrderSpecifier<?>>)

Avez-vous une idée de ce qui ne va pas entre ces versions?

MODIFIER:

En utilisant

    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-jpa</artifactId>
        <version>4.1.0</version>
    </dependency>   

j'ai encore ces erreurs:

C:\Prj\Java\Eclipse\Elfolab\src\main\Java\com\interlabsrl\elfolab\persistence\multiple\repository\elettroforesi\table\custom\impl\MetodicaRepositoryImpl.Java:11: error: package com.mysema.query.jpa.impl does not exist
import com.mysema.query.jpa.impl.JPAQuery;
6
Etantonio

Au lieu de

<dependency>
    <groupId>com.mysema.querydsl</groupId>
    <artifactId>querydsl-*</artifactId>
    <version>3.7.3</version>
</dependency>

vous devriez utiliser maintenant

<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-*</artifactId>
    <version>4.1.3</version>
</dependency>

Les packages contenus dans les fichiers jar ont également été modifiés. Vous devez donc modifier les classes querydsl importées dans votre code source.

7
PetroCliff

Vous devriez mettre à jour la version de votre querydsl à 4.1. Notez que le groupId a également changé.

Dans ici vous pouvez voir que la version 1.10.1.RELEASE utilise la version 4.1 de querydsl et qu’elle pourrait interférer avec vous avec une ancienne version.

2
David Magalhães

Utilisez la configuration suivante trouvée (à peine) ici

<dependency>
  <groupId>com.querydsl</groupId>
  <artifactId>querydsl-apt</artifactId>
  <version>${querydsl.version}</version>
  <scope>provided</scope>
</dependency>

<dependency>
  <groupId>com.querydsl</groupId>
  <artifactId>querydsl-jpa</artifactId>
  <version>${querydsl.version}</version>
</dependency>

et pour le plugin maven

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

Bien que la majorité ait été déplacée vers com.querydsl, le plugin devrait toujours être com.mysema.

0
Vadim