0

I'm migrating a Spring boot app from Spring 2.7 to 3.0.4, I'm having an issue with something of querysDSL. I already trying to solve it changing a dependency but it doesn't work, I would be thankful if someone could help me to see the mistake.

This is the following error:

warning: unknown enum constant GenerationType.IDENTITY
  reason: class file for javax.persistence.GenerationType not found
warning: unknown enum constant GenerationType.IDENTITY
warning: unknown enum constant FetchType.LAZY
  reason: class file for javax.persistence.FetchType not found
warning: unknown enum constant CascadeType.ALL
  reason: class file for javax.persistence.CascadeType not found
warning: unknown enum constant GenerationType.IDENTITY
warning: unknown enum constant FetchType.LAZY
warning: unknown enum constant CascadeType.ALL
warning: unknown enum constant GenerationType.IDENTITY
warning: unknown enum constant GenerationType.IDENTITY
error: cannot access MappedSuperclass
  class file for javax.persistence.MappedSuperclass not found
/Users/paolabeltran/Documents/GitHub/ar-dispute-es-updater/src/main/java/com/ibm/ar/dispute/es/updater/config/QueryDslConfig.java:45: error: cannot access EntityManager
unknown enum constant GenerationType.IDENTITY

    return new JPAQueryFactory(em);
           ^
  class file for javax.persistence.EntityManager not found
/Users/paolabeltran/Documents/GitHub/ar-dispute-es-updater/src/main/java/com/ibm/ar/dispute/es/updater/utils/UserUtils.java:13: error: cannot find symbol
    content.setNameFull(Constants.DEFAULT_USER_NAME);
unknown enum constant FetchType.LAZY

           ^
unknown enum constant CascadeType.ALL

  symbol:   method setNameFull(String)
  location: variable content of type BluepagesResponse.BluepagesContent
unknown enum constant GenerationType.IDENTITY

unknown enum constant FetchType.LAZY

unknown enum constant CascadeType.ALL

unknown enum constant GenerationType.IDENTITY

/Users/paolabeltran/Documents/GitHub/ar-dispute-es-updater/src/main/java/com/ibm/ar/dispute/es/updater/utils/UserUtils.java:14: error: cannot find symbol
cannot access MappedSuperclass

And this is my querysDSL config:

package com.ibm.ar.dispute.es.updater.config;

import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.Profile;
import com.querydsl.jpa.impl.JPAQueryFactory;
import com.querydsl.sql.DB2Templates;
import com.querydsl.sql.SQLQueryFactory;
import com.querydsl.sql.SQLTemplates;
import com.querydsl.sql.spring.SpringConnectionProvider;
import com.querydsl.sql.spring.SpringExceptionTranslator;
import com.querydsl.sql.types.DateTimeType;
import com.querydsl.sql.types.LocalDateType;

@Configuration
@Import(DatabaseConfig.class)
@Profile("default")
public class QueryDslConfig {

  @PersistenceContext
  private EntityManager em;

  @Bean
  public com.querydsl.sql.Configuration querydslConfiguration() {
    SQLTemplates templates = DB2Templates.builder().printSchema().build();
    com.querydsl.sql.Configuration configuration = new com.querydsl.sql.Configuration(templates);
    configuration.register(new DateTimeType());
    configuration.register(new LocalDateType());
    configuration.setExceptionTranslator(new SpringExceptionTranslator());
    // useLiterals to get SQL with bindings value in querydsl
    // Refer https://stackoverflow.com/a/21710120/9490334
    return configuration;
  }

  @Bean
  public SQLQueryFactory queryFactory(DatabaseConfig dbConfig) {
    return new SQLQueryFactory(querydslConfiguration(), new SpringConnectionProvider(dbConfig.dataSource()));
  }

  @Bean
  JPAQueryFactory jpaQueryFactory() {
    return new JPAQueryFactory(em);
  }
}

Directly in the IDE i'm recieving an Cannot resolve the constructor error in the return new JPAQueryFactory(em);

This are my dependencies at build.gradle:

def lombokVersion = '1.18.+'
def querydslVersion = '5.0.+'
dependencies {
    // Spring dependencies
    implementation('org.springframework.boot:spring-boot-starter-web')
    implementation('org.springframework.boot:spring-boot-starter-validation')
    implementation('org.springframework.boot:spring-boot-starter-security')
    implementation('org.springframework.boot:spring-boot-starter-data-jpa')
    implementation('org.springframework.boot:spring-boot-starter-actuator')
    implementation('org.springframework.boot:spring-boot-starter-data-redis')
    annotationProcessor("org.springframework.boot:spring-boot-starter-data-jpa")

    // Querydsl
    implementation group: 'com.querydsl', name: 'querydsl-jpa', version: querydslVersion
    implementation group: 'com.querydsl', name: 'querydsl-sql', version: querydslVersion
    implementation group: 'com.querydsl', name: 'querydsl-sql-spring', version: querydslVersion
    implementation group: 'com.querydsl', name: 'querydsl-apt', version: querydslVersion
    implementation group: 'com.querydsl', name: 'querydsl-core', version: querydslVersion

    annotationProcessor("com.querydsl:querydsl-apt:${querydslVersion}:jakarta")
    annotationProcessor('javax.annotation:javax.annotation-api:1.3.2')
    annotationProcessor('org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.2.Final')
    annotationProcessor("jakarta.persistence:jakarta.persistence-api")
    annotationProcessor("jakarta.annotation:jakarta.annotation-api")
}

I already change at first a dependency, from annotationProcessor("com.querydsl:querydsl-apt:${querydslVersion}:jpa") to annotationProcessor ("com.querydsl:querydsl-apt:${querydslVersion}:jakarta")

  • since spring 6.x all `javax` classes are replaced with the `jakarta` equivalents [reference](https://spring.io/blog/2022/05/24/preparing-for-spring-boot-3-0) – Dirk Deyne Aug 02 '23 at 16:14
  • Remove `javax.annotation`, `org.hibernate.javax.persistence`, `jakarta.persistence` and `jakarta.annotation` those are already part of other dependencies. Fix compilation errors you get due to missing `javax.persistence` classes, use `jakarta.persistence` and make sure you use a QueryDSL version that is compatible with JakartaEE and not JavaEE! – M. Deinum Aug 02 '23 at 18:23
  • https://github.com/querydsl/querydsl/pull/2726 (you only specified a classifier for the APT and only the annotation processor not the JPA or APT dependency used at runtime. – M. Deinum Aug 03 '23 at 18:22
  • I'm sorry, I'm not understanding – Pao Beltran Aug 03 '23 at 18:52

0 Answers0