如何用PathBuilder替换下面使用生成的Q*类和java反射的方法?
// member vars:
T operand; // can be a BigDecimal or a String
String tableName;
String fieldName;
String methodName;
public Predicate asPredicate()
{
Class<?> tableClazz = Class.forName("foo.bar.database.model.Q"+ WordUtils.capitalize(tableName));
Object tableObj = tableClazz.getConstructor(String.class).newInstance(tableName +"1000");
Field colField = tableClazz.getDeclaredField(fieldName);
Object colObj = colField.get(tableObj);
Class classParam = Object.class;
if(methodName.matches(".*like"){
classParam = String.class;
}
// method name is one of eq, ne, like...
Method m = colObj.getClass().getMethod(methodName, classParam );
return (Predicate) m.invoke(colObj, operand);
}
Run Code Online (Sandbox Code Playgroud)
这很好,但我建议使用PathBuilder来回答我的另一个问题/sf/ask/1068889181/)这也将删除尴尬的newInstance(tableName +"1000").
PathBuilder<?> entityPath = new PathBuilder("foo.bar.database.model.Q"+ …Run Code Online (Sandbox Code Playgroud) 我有Items类:
@Entity
@Table(name ="Items")
Class Items{
@ID
private long id;
private String upc;
private long itemNo;
private int qty;
-----
}
Run Code Online (Sandbox Code Playgroud)
我需要在QueryDSL的JPAQuery中创建下面的sql语句.
select itemNo, upc, count(*) t from Items group by ITEM_NO, UPC order by t;
Run Code Online (Sandbox Code Playgroud)
QueryDSL示例需要修改order by子句:
QItems items = QItems.items;
query.from(items)
.groupBy(items.itemNo,items.upc)
.orderby(<Dont Know How to sort on count>).list(items.itemNo,items.upc,items.count());
Run Code Online (Sandbox Code Playgroud)
需要帮助正确起草此查询?
我尝试生成查询类型类(例如QUser)但出现错误...
你可以在这里找到我的源代码:https : //github.com/TheNakedMan/remindme.server/
我正在使用 IntelliJ IDEA,似乎我有工作插件。请帮帮我。
日志消息:
/remindme.server/src/main/java/com/qoobico/remindme/server/repository/UserRepository.java 错误:(21, 126) java:找不到符号符号:类QUser
错误:(25, 62)java:找不到符号符号:类QUser
位置:接口com.qoobico.remindme.server.repository.UserRepository
更新:
之后LifeCycle->clean和运行apt:process中的IntelliJ,我有这样的错误:
[错误] 无法在项目 com.qoobico.remindme.server 上执行目标:无法解析项目 com.qoobico.remindme.server:com.qoobico.remindme.server:war:1.0-SNAPSHOT: 找不到工件 com 的依赖项.qoobico.remindme.server:com.qoobico.remindme.server:jar:1.0-SNAPSHOT
我正在尝试使用Spring Boot设置QueryDSL,当我无法正确编译项目时,我遇到了问题.我收到了很多错误:
[ERROR] /C:..../target/generated-sources/apt/**/***/domain/QFirm.java:[68,18] cannot find symbol
[ERROR] symbol: class StringPath
[ERROR] location: class **.****.domain.QFirm
Run Code Online (Sandbox Code Playgroud)
这是我的Maven pom文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>**.***</groupId>
<artifactId>******-company-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>*****-company-service</name>
<description>*******-company-service</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId> …Run Code Online (Sandbox Code Playgroud) 我试图在Spring-Boot 1.5.2项目中重新获得queryDSL 1.4.1的Q类.IDE是Intellij Ultimate.
的build.gradle
buildscript {
ext {
springBootVersion = '1.5.2.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
plugins {
id 'net.ltgt.apt' version '0.8'
id 'java'
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'idea'
version = '0.0.5-SNAPSHOT'
sourceCompatibility = 1.8
ext {
queryDslVersion = '4.1.4'
javaGeneratedSources = file("$buildDir/generated-sources/java")
}
compileJava {
doFirst {
javaGeneratedSources.mkdirs()
}
options.compilerArgs += [
'-parameters', '-s', javaGeneratedSources
]
}
idea {
module {
sourceDirs += file('generated/')
generatedSourceDirs …Run Code Online (Sandbox Code Playgroud) 我有一些表,我想使用queryDSL联接获得结果,但是没有找到关于使用queryDSL的多个联接的任何示例。
我有这些表:
帐户表:accountId(PK)| 电邮| 密码
account_profile表:accountId(PK)(fk到帐户)| 昵称
社区表:articleId(PK)| accountId(fk到帐户)| 标题| 内容
现在我想在JPQL下面是queryDSL代码
select r from community r join r.account.profile a where a.nickname = :nickname
Run Code Online (Sandbox Code Playgroud)
我有实体元模型-QAccount,QAccountProfile,QCommunity
另外,我必须通过分页来获取结果,因此查询应与pageable对象一起调用。
这是我的工作尚未完成。
JPAQuery</*What generic type expected?*/> query = new JPAQuery</*???*/>(entityManager);
Predicate predicate = query.from(QCommunity.community).join(/*join directly accountProfile? or account? is it QEntity or real entity?*/);
// where should I place nickname matching condition ?
...
list = (repository.findAll(predicate, pageable)).getContent();
Run Code Online (Sandbox Code Playgroud)
昵称匹配条件应放在哪里?
编辑:附加实体信息
Account.java
@Entity
@Table(name="account", uniqueConstraints={
@UniqueConstraint(columnNames="account_seq"),
@UniqueConstraint(columnNames="email")
})
@DynamicInsert
@DynamicUpdate
@Data
@EqualsAndHashCode
@ToString(includeFieldNames=true)
@RequiredArgsConstructor(staticName="of") …Run Code Online (Sandbox Code Playgroud) 使用Query DSL和 hibernate (Spring Data JPA) 来构建这样的查询
if( bankId != null ){
query.where(
coopMember.personId.bankAccountId.isNotNull().and(
coopMember.personId.bankAccountId.bankBranch.bankId.eq(bankId))
);
}
return query.fetch();
Run Code Online (Sandbox Code Playgroud)
这里的逻辑很简单:如果有一个与某人关联的银行帐户,则按银行 ID 过滤结果。
所述BankAccount实体具有BankBranch保持bankId整数值。一个CoopMember实体可能有也可能没有BankAccount
问题是当执行上述 QueryDSL 查询时NullPointerException,即使存在非空检查,也会抛出 a。
将逻辑更改为遵循相同的错误会引发。我想知道为什么bankBranch不能进行“空检查”:
if( bankId != null ){
query.where(
coopMember.personId.bankAccountId.isNotNull().and(
coopMember.personId.bankAccountId.bankBranch.isNotNull())
);
}
Run Code Online (Sandbox Code Playgroud)
抛出以下堆栈跟踪:
java.lang.NullPointerException:在 re.iprocu.repository.impl.MemberRepositoryImpl.findMembersByPaymentModes(MemberRepositoryImpl.java:306) ~[classes/:na] 在 re.iprocu.repository.impl.MemberRepositoryImpl$$FastClass$6aCG5ae 为 null invoke() ~[classes/:na] 在 org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE] 在org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:738) ~[spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE] 在 org.springframework.aop.framework.ReflectiveMethodInvocation .proceed(ReflectiveMethodInvocation.java:157) ~[spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE] 在 org.springframework.dao.support.PersistenceExceptionTranslationInterceptor。invoke(PersistenceExceptionTranslationInterceptor.java:136) ~[spring-tx-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring -aop-4.3.13.RELEASE.jar:4.3.13.RELEASE] …
我使用下面的 maven pom.xml 文件并且无法生成 querydsl 文件。
我发现了一个问题:Kotlin-Kapt Annotation Processor not working with maven
我想从 kotlin 实体类生成 jpa querydsl 文件。
网上有一个很好的例子,说明如何使用 gradle https://github.com/JetBrains/kotlin-examples/blob/master/gradle/kotlin-querydsl/build.gradle生成 dsl 文件。
但是,我尝试在 Maven 中实现这一点,但没有运气。我目前的pom在下面。有人知道可能是什么问题吗?提前致谢。
它使用 querydsl3 而我使用 4
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.techcave.chat</groupId>
<artifactId>jpa</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>jpa</name>
<description>Kotlin Demo project for Spring Boot JPA</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<kotlin.compiler.incremental>true</kotlin.compiler.incremental>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<kotlin.version>1.2.10</kotlin.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId> …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) 无法理解如何配置 build.gradle 以在没有任何 jpa/jdo/mongo 的情况下使用 querydsl 注释处理器。我想使用@QueryEntity 注释来生成 Q 类,这样我就可以使用 DSL 支持编写动态 SQL 查询,然后将查询转换为纯文本并将其提供给 Spring R2DBC DatabaseClient 执行程序。
有没有办法使用 gradle querydsl apt 插件和 querydsl 注释处理器在 build.gradle 文件中生成带有 @QueryEntity 注释的 Q 类?
我正在使用 gradle 5、Spring Data R2DBC、Spring Boot,计划将 queryDsl 与注释进程集成。
这是我当前的 build.gradle:
plugins {
id 'java'
id 'org.springframework.boot' version '2.2.1.RELEASE'
id "com.ewerk.gradle.plugins.querydsl" version "1.0.8"
}
apply plugin: 'io.spring.dependency-management'
group = 'com.whatever'
repositories {
mavenCentral()
maven { url "https://repo.spring.io/milestone" }
}
ext {
springR2dbcVersion = '1.0.0.RELEASE'
queryDslVersion = '4.2.2'
}
dependencies { …Run Code Online (Sandbox Code Playgroud)