Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 坚持在spring数据应用程序中查找QueryDSL谓词_Java_Mysql_Spring Data Jpa_Spring Data_Querydsl - Fatal编程技术网

Java 坚持在spring数据应用程序中查找QueryDSL谓词

Java 坚持在spring数据应用程序中查找QueryDSL谓词,java,mysql,spring-data-jpa,spring-data,querydsl,Java,Mysql,Spring Data Jpa,Spring Data,Querydsl,我在查询一些数据时遇到问题,我将简要解释我的问题并举例说明 我使用Spring数据、QueryDSL和MySQL 我想在queryDSL方法中这样查询。一个具体的例子只是一个简单的例子来给出一个想法 例如,有两个表Employee和Certificate。两者之间的关系是一(员工)对多(证书) 以下是表格 Employee (id, first_name, last_name); Certificate (id, name, date, fk_emp); 以下是实体: @Entity @Tab

我在查询一些数据时遇到问题,我将简要解释我的问题并举例说明

我使用Spring数据、QueryDSL和MySQL

我想在queryDSL方法中这样查询。一个具体的例子只是一个简单的例子来给出一个想法

例如,有两个表Employee和Certificate。两者之间的关系是一(员工)对多(证书)

以下是表格

Employee (id, first_name, last_name);
Certificate (id, name, date, fk_emp);
以下是实体:

@Entity
@Table(name = "EMPLOYEE")
class Employee {
  @Id
  @Column(name = "ID")
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Integer id;

  @Column(name = "FIRST_NAME")
  private String firstName;

  @Column(name = "LAST_NAME")
  private String lastName;

  @OneToMany(mappedBy = "employee", cascade = CascadeType.ALL)
  private List<Certificate> certificates = new ArrayList<>();
}

@Entity
@Table(name = "CERTIFICATE")
class Certificate {
  @Id
  @Column(name = "ID")
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Integer id;

  @Column(name = "CERTIFICATE_NAME")
  private String certificateName;

  @Column(name = "DATE")
  private Date date;

  @ManyToOne
  @JoinColumn(name = "REF_EMPLOYEE")
  private Employee employee;
}

谢谢您

本机JPQL查询:

SELECT * FROM EMPLOYEE A
LEFT JOIN CERTIFICATE B ON A.ID = B.REF_EMPLOYEE AND DATE BETWEEN CAST('2014-12-22' AS DATE) AND CAST('2015-12-22' AS DATE);
query.from(employee)
    .leftJoin(employee.certificates, certificate)
    .on(certificate.date.between('from_date', 'to_date'))
    .list(employee);
Querydsl连接变量:

SELECT * FROM EMPLOYEE A
LEFT JOIN CERTIFICATE B ON A.ID = B.REF_EMPLOYEE AND DATE BETWEEN CAST('2014-12-22' AS DATE) AND CAST('2015-12-22' AS DATE);
query.from(employee)
    .leftJoin(employee.certificates, certificate)
    .on(certificate.date.between('from_date', 'to_date'))
    .list(employee);

注意:此处的日期格式可能不同,请根据您的需要更改

同时,我想获取所有没有任何证书的员工Left join将从员工表中提取所有员工,即,它将同时提取“有证书的员工”和“无证书的员工”。请尝试在mysql中运行查询,并根据您的需要构建查询框架。请让我知道任何帮助。我在第3行有一个错误:无法解析自QueryDsl 3.0.0版本以来引入的“JPQLQuery”on()中的方法“on”。我建议在使用旧版本时将您的版本升级到3.0.0。另外,您是否同时尝试了本机sql查询?我如何使用本机sql查询,因为我尝试在@query(“”)中添加请求;但不起作用