小编Mic*_*wka的帖子

升级到Gradle 5后Querydsl注释处理器问题

我有一个gradle脚本,该脚本从Mongo带注释的实体生成querydsl类。到目前为止,它一直在工作,但是升级到Gradle 5之后,我遇到了一个问题:

* What went wrong:
Execution failed for task ':myproject-common:compileQuerydsl'.
Annotation processor 'org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor' not found
Run Code Online (Sandbox Code Playgroud)

请在下面找到我的gradle.build脚本。任何想法可能有什么问题吗?我了解到Gradle 5中发生了变化,即在编译期间默认情况下不使用注释处理器,并且应该添加注解处理器声明,但是当我将其添加到依赖项时,会发生相同的错误。

plugins {
    id 'org.springframework.boot' version '2.0.4.RELEASE'
    id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}
repositories {
    mavenCentral()
}
apply plugin: 'java'
apply plugin: 'io.spring.dependency-management'
jar {
    enabled = true
    baseName = 'myproject-common'
    version =  '0.0.1-SNAPSHOT'
}
// do no package commons into fat jar
bootJar {
    enabled = false
}
querydsl {
    library = 'com.querydsl:querydsl-apt:4.1.4'
    querydslSourcesDir = 'src/main/querydsl'
    springDataMongo = true
}
sourceCompatibility = 11.0 …
Run Code Online (Sandbox Code Playgroud)

java gradle querydsl

4
推荐指数
3
解决办法
3400
查看次数

如何在 QueryDSL 4 中获取惰性集合

我在使用 querydsl 执行非常简单的查询时遇到以下问题。想象一下,我们有两个实体:

汽车----<车主

我想执行查询,该查询返回所有汽车并获取延迟映射的所有所有者。换句话说,我想获取那些在交易之外使用的东西。

我的查询看起来像:

List<Car> cars = new JPAQuery<Car>(em)
                    .select(car).from(car)
                    .leftJoin(car.owners, owner)
                    .where(car.make.eq(make))
                    .orderBy(new OrderSpecifier<>(Order.ASC, car.id))
                    .distinct()
                    .fetch();
Run Code Online (Sandbox Code Playgroud)

类似的查询在 QueryDSL 3 中运行良好,但升级到 4 后,我收到 LazyInitializationException,这意味着未正确获取“所有者”。你能否解释一下如何解决这个问题?

例如,当我手动编写此查询时,它完全正常:

List<Car> cars = em.createQuery(
            "SELECT DISTINCT c FROM Car c LEFT JOIN FETCH c.owners WHERE c.make = :make ORDER BY c.id ASC")
            .setParameter("make", make).getResultList();
Run Code Online (Sandbox Code Playgroud)

我正在使用带有 querydsl 4.1.4 的 spring-boot 2

顺便说一句,查询在 querydsl 3 中运行良好

List<Car> car = new JPAQuery(em)
                .from(car)
                .leftJoin(car.owners)
                .fetch()
                .distinct()
                .where(car.make.eq(make))
                .orderBy(new OrderSpecifier<>(Order.ASC, car.id))
                .list(car);            
Run Code Online (Sandbox Code Playgroud)

jpql querydsl spring-data-rest spring-boot

2
推荐指数
1
解决办法
1281
查看次数

标签 统计

querydsl ×2

gradle ×1

java ×1

jpql ×1

spring-boot ×1

spring-data-rest ×1