Hibernate 当外键是对象时,如何在JPA查询中传递外键的参数?
我有一个名为Affecter的类,它有一些属性和一些多个外键。我想创建一个查询,用这个外键的参数搜索一些数据。但是,这个外键由我的类中的一个对象表示,因此当我进行查询时,我得到以下错误:java.lang.IllegalArgumentException:参数值与excepted type不匹配 这是我的实体: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
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