【问题标题】:Spring Boot QueryDsl returns Caused by: java.lang.UnsupportedOperationException: nullSpring Boot QueryDsl 返回原因:java.lang.UnsupportedOperationException: null
【发布时间】:2020-09-18 13:53:19
【问题描述】:

代码如下

    QContinent continent = QContinent.continent;

    JPAQuery query = new JPAQuery(entityManager);


    query.from(continent).where(continent.name.eq("www"));
    List<Object> fetch = query.fetch();

    System.err.println("===" + fetch);

返回
引起:java.lang.UnsupportedOperationException:null 在 java.util.Collections$UnmodifiableMap.put(Collections.java:1457) ~[na:1.8.0_191] 在 com.querydsl.jpa.JPQLSerializer.visitConstant(JPQLSerializer.java:327) ~[querydsl-jpa-4.2.1.jar:na] 在 com.querydsl.core.support.SerializerBase.visit(SerializerBase.java:221) ~[querydsl-core-4.3.1.jar:na] 在 com.querydsl.core.support.SerializerBase.visit(SerializerBase.java:36) ~[querydsl-core-4.3.1.jar:na] 在 com.querydsl.core.types.ConstantImpl.accept(ConstantImpl.java:140) ~[querydsl-core-4.3.1.jar:na]

【问题讨论】:

  • 感谢@Eklavya 的回复,但问题出在querydsl 版本
  • 你用的是什么版本的@umesh?
  • @user3388770 是版本问题,现在已经解决了
  • 我也遇到了类似的问题,可能是什么版本问题?
  • @user3388770 只需从 pom.xml 中删除 以获取 querydsl 依赖项

标签: java spring-boot spring-mvc jpa spring-data


【解决方案1】:

正如@user3388770 所建议的,原因是版本不匹配。一般来说,在您的pom.xml/build.gradle 中不要指定依赖项的版本,Spring 已经提供了该版本,除非您真的出于某种原因需要它。

您可以在这里找到使用/兼容的依赖:https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/appendix-dependency-versions.html(根据您的 Spring 版本更改版本)

如果出现错误,您的依赖项应如下所示 (build.gradle):

plugins {
    id "org.springframework.boot" version "2.3.1.RELEASE"
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    ...
}

apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
...

dependencies {
   annotationProcessor(
            ...
            //some put a version below before ":jpa"; dont.
            "com.querydsl:querydsl-apt::jpa"
            ...
    )

    //just an example without version numbers as they are delivered with spring boot automatically
    compile "org.springframework.boot:spring-boot-starter-web"
    compile "org.springframework.boot:spring-boot-actuator"
    ...
    compile group: 'org.apache.httpcomponents', name: 'httpclient'
    compile 'org.thymeleaf.extras:thymeleaf-extras-java8time'

    //but most importantly this below 
    compile "com.querydsl:querydsl-jpa"
}

【讨论】:

    【解决方案2】:

    如果您在 POM 基础项目中,请使用这些依赖项和 apt 插件来解决给定版本的此问题

     <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-apt</artifactId>
        <version>4.1.3</version>
        <scope>provided</scope>
    </dependency>
    
    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-jpa</artifactId>
        <version></version>
    </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/java</outputDirectory>
                <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
            </configuration>
        </execution>
    </executions>
    </plugin>
    

    【讨论】:

      猜你喜欢
      • 2021-06-10
      • 2019-11-11
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      • 2019-03-14
      • 2020-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多