作为对象的JPA查询中如何为外键传递参数?

时间:2019-07-03 14:29:13

标签: hibernate jpa

我有一个名为Affecter的类,其中包含一些属性和一些ManyToOne外键。我想创建一个查询,该查询使用此外键的参数搜索某些数据。但是,此外键由我的类中的一个对象表示,因此当我进行查询时,出现以下错误:java.lang.IllegalArgumentException:参数值与除类型

之外的其他值不匹配

这是我的实体:

package org.safran.cockpit.entities;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;

import lombok.Data;
import lombok.ToString;
@Table(name = "affecter")
@Data
@Entity
public class Affecter implements Serializable {
  private static final long serialVersionUID = 1L;

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(name = "id", insertable = false, nullable = false)
  private Integer id;

  @Column(name = "dateEntree", nullable = false)
  private Date dateEntree;

  @Column(name = "dateSortie")
  private Date dateSortie;

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name="idAffaire", nullable = false)
  private Affaire affaire;

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name="idService", nullable = false)
  private Service service;

这是我的查询:

 @Query(value = "SELECT a FROM Affecter a WHERE a.service = ?1 AND 
a.dateSortie=''")
  public List<Affecter> findAffecterByService(Integer service);

这就是我调用查询的方式:

 @GetMapping(value="/listAffecterService/{idService}")
    public List<Affecter> listAffecterService(@PathVariable(name="idService") int idService){
        return affecterRepository.findAffecterByService(idService);
    }

有人知道如何解决这个问题吗?谢谢

1 个答案:

答案 0 :(得分:-1)

SELECT a FROM Affecter a WHERE a.service = ?1

因此,您正在将a.service与参数进行比较。 a.service属于服务类型。因此,您的参数也必须是Service类型。

鉴于您具有服务的ID,或者首先获取与此ID相关联的Service,然后将服务作为查询的参数传递,或者在查询中比较ID:

SELECT a FROM Affecter a WHERE a.service.id = ?1