当前位置: 首页 > 知识库问答 >
问题:

从需求代码实现HQL构建器

令狐声
2023-03-14

我在构建交易的地方有这样的代码:

public BooleanBuilder findAllTransactionsByUserId(Long userId, DateTime startDate, DateTime endDate, 
      String firstName, String lastName, String email) {

    QTransaction transaction = QTransaction.transaction;
    BooleanBuilder where = getTransactionWhereClause(startDate, endDate, firstName, lastName, email);
    where.and(transaction.userId.eq(userId));

    return where;
  }

  public BooleanBuilder getTransactionWhereClause(DateTime startDate, DateTime endDate,
      String firstName, String lastName, String email) {

    BooleanBuilder where = new BooleanBuilder();
    QTransaction transaction = QTransaction.transaction;

    if (startDate != null && endDate != null) {
      where.and(transaction.transactionDate.between(startDate, endDate));
    }
    if (firstName != null) {
      where.and(transaction.firstName.eq(firstName));
    }
    if (lastName != null) {
      where.and(transaction.lastName.eq(lastName));
    }
    if (email != null) {
      where.and(transaction.email.eq(email));
    }
  
    return where;
  }

我缺少类QTransaction的代码,我无法找出Java类的内容,以便手动创建它。

你知道我如何实现缺失的代码吗?

我尝试了这个gradle配置:

plugins {
    id 'org.springframework.boot' version '2.6.7'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'test'
version = '0.0.1'
sourceCompatibility = '17'

ext {
    set('springCloudVersion', "2021.0.2")
    queryDslVersion = '5.0.0'
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-validation'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.hibernate.validator:hibernate-validator'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    implementation 'joda-time:joda-time:2.10.14'
    implementation 'org.springframework.boot:spring-boot-starter-hateoas:2.6.7'
    implementation 'org.postgresql:postgresql'
    implementation 'org.jadira.usertype:usertype.core:7.0.0.CR1'
    implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap:3.1.2'
    implementation 'org.apache.commons:commons-lang3:3.12.0'
    implementation 'com.google.code.gson:gson:2.9.0'

    // QueryDSL
    implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
    annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}:jpa"
    testImplementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
    testAnnotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}:jpa"
    
    // Lombok
    compileOnly 'org.projectlombok:lombok:1.18.24'
    annotationProcessor 'org.projectlombok:lombok:1.18.24'
    testCompileOnly 'org.projectlombok:lombok:1.18.24'
    testAnnotationProcessor 'org.projectlombok:lombok:1.18.24'
    // Swagger
    implementation 'org.springdoc:springdoc-openapi-ui:1.6.8'

    implementation 'org.liquibase:liquibase-core'
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2'
}

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}

tasks.named('test') {
    useJUnitPlatform()
}

但是没有生成JPA类。我得到例外:

import com.test.domain.QTransaction;
                       ^
  symbol:   class QTransaction
  location: package com.test.domain

你知道正确的实施方式是什么吗?

共有1个答案

毛缪文
2023-03-14

Q类通常由QueryDSL和QueryDSL注释处理器工具生成。

我对Gradle不像对Maven那样熟悉,但Gradle的配置对我来说很好。以防万一,看看这个或这个其他相关的SO问题。

当与JPA一起使用时,正如您所猜测的,作为第一步,您必须创建一个表示表的类,您必须创建一个包含所需信息的实体。在您的情况下,它看起来类似于以下代码:

@Entity
public class Transaction {

    @Id
    @GeneratedValue
    private Long id;

    private Long userId;

    private String firstName;

    private String lastName;

    private String email;

    private DateTime transactionDate;

    // getters and setters

}

请注意,我们使用@Entity注释了类。

编译完类后,您会看到Gradle应该生成了一个名为QTransaction的类。

除其他信息外,它将生成QTransaction类的公共静态最终实例:

public static final QTransaction transaction = new QTransaction("transaction");

这个类是构建查询时通常使用的类,如示例中所示。

本文虽然以Maven为重点,但可能会有所帮助。

 类似资料:
  • 我想尝试对java.lang中的java库进行更改,最终还可能对其他包进行更改。这意味着不使用,我希望至少能够分离出java.lang并编译它们。 如果使用rt.jar,则不可能在java.lang中编辑类的源代码,因为它们已经在rt.jar中找到了。 我在Mercurial中找到了repo:http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/tip/s

  • 本文向大家介绍Hibernate hql查询代码实例,包括了Hibernate hql查询代码实例的使用技巧和注意事项,需要的朋友参考一下 本文研究的主要是Hibernate hql查询的相关内容,具体如下。 HQL介绍 Hibernate语言查询(Hibernate Query Language,HQL)它是完全面向对象的查询语句,查询功能非常强大;具备多态、关联等特性,HQL查询也是Hiber

  • Your browser does not support the video tag.

  • 所以,我想创建一个新的BouncyCastle 1.47罐子,它不是OSGi罐子。我已经从他们的站点下载了源代码(JDK1.5-1.7的“JCE with provider and lightweight API”下的bcprov-jdk15on-147.tar.gz文件),但是当我提取它和源代码时,我看不到构建脚本。看看他们的维基,他们说这应该是一个使用ant的简单案例。 以前有人这样做过吗,能

  • 本文向大家介绍Python post请求实现代码实例,包括了Python post请求实现代码实例的使用技巧和注意事项,需要的朋友参考一下 使用post请求登陆小极客网 1、获取登陆接口,及用户名和密码参数   进入小极客网,先注册个账户,修改用户名和密码,然后点击登陆,打开debug调试-进入到network下   输入用户名和密码,点击登陆   如下图:获得登陆接口:http://www.xi

  • 14. 构建代码 Spring Boot并不要求任何特殊的代码布局,然而,存在一些有用的最佳实践。 14.1 使用“default”包 如果一个类没有声明包,则认为这个类位于“默认包”中。通常不鼓励使用“默认包”,应当避免使用它。对于使用了@ComponentScan、@EntityScan或@SpringBootApplication注解的Spring Boot程序,“默认包”可能会导致特殊问题