Как передать параметр для внешнего ключа в запросе JPA, когда это объект? - PullRequest
0 голосов
/ 03 июля 2019

У меня есть класс под названием 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 голосов
/ 03 июля 2019
SELECT a FROM Affecter a WHERE a.service = ?1

Итак, вы сравниваете a.service со своим параметром. a.service относится к типу Сервис. Таким образом, ваш параметр также должен иметь тип Service.

Учитывая, что у вас есть идентификатор службы, вы сначала получаете службу, связанную с этим идентификатором, и передаете службу в качестве аргумента вашего запроса, либо сравниваете идентификаторы в своих запросах:

SELECT a FROM Affecter a WHERE a.service.id = ?1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...