Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
Hibernate 当外键是对象时,如何在JPA查询中传递外键的参数?_Hibernate_Jpa - Fatal编程技术网

Hibernate 当外键是对象时,如何在JPA查询中传递外键的参数?

Hibernate 当外键是对象时,如何在JPA查询中传递外键的参数?,hibernate,jpa,Hibernate,Jpa,我有一个名为Affecter的类,它有一些属性和一些多个外键。我想创建一个查询,用这个外键的参数搜索一些数据。但是,这个外键由我的类中的一个对象表示,因此当我进行查询时,我得到以下错误:java.lang.IllegalArgumentException:参数值与excepted type不匹配 这是我的实体: package org.safran.cockpit.entities; import java.io.Serializable; import java.util.Date; imp

我有一个名为Affecter的类,它有一些属性和一些多个外键。我想创建一个查询,用这个外键的参数搜索一些数据。但是,这个外键由我的类中的一个对象表示,因此当我进行查询时,我得到以下错误:java.lang.IllegalArgumentException:参数值与excepted type不匹配

这是我的实体:

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);
    }
我这样称呼我的查询:

 @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);
    }
有人知道如何解决这个问题吗?谢谢

SELECT a FROM Affecter a WHERE a.service = ?1
因此,您将a.service与您的参数进行比较。a、 服务属于服务类型。因此,您的参数也必须是Service类型

假设您有服务的ID,您可以首先获取与此ID关联的服务,并将该服务作为查询的参数传递,或者在查询中比较ID:

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