我有一个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) 我在使用 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)