标签: querydsl

QueryDSL:从PathBuilder生成谓词

如何用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)

querydsl

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

Mysema QueryDSL JPAQuery for SQL groupby子句和order by

我有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)

需要帮助正确起草此查询?

querydsl jpa-2.0

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

QueryDsl 错误。未生成 Q 类

我尝试生成查询类型类(例如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

java spring maven querydsl

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

Spring Boot + QueryDSL:缺少com.mysema.query包类

我正在尝试使用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)

java maven querydsl spring-data spring-data-jpa

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

使用QueryDSL 4.1.4和Intellij进行Gradle

我试图在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)

spring intellij-idea gradle querydsl spring-boot

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

如何联接多个queryDSL表

我有一些表,我想使用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)

dsl spring jpa querydsl spring-data

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

QueryDSL where 子句上的 NullPointerException

使用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] …

java spring hibernate querydsl spring-data-jpa

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

如何在 Kotlin 中使用 QueryDSL 并生成文件

我使用下面的 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)

plugins spring querydsl kotlin

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

如何在 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 注释处理器和 gradle 插件

无法理解如何配置 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)

gradle querydsl spring-boot spring-data-r2dbc

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