Запрос данных Spring по умолчанию, содержащий «id» в списке (JpaRepository) - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть следующие простые сущности:

Suggestion.java:

@Entity
public class Suggestion {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @OneToOne
    private Employee author;

    @OneToMany
    @JoinColumn(name = "recipients_id")
    private List<Employee> recipients;
}

и Employee.java:

@Entity
public class Employee {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    private String name;
}

Я хотел бы вернуть в контроллер все suggestions, которые содержат только одного сотрудника id в recipients списке.

Можно ли избежать пользовательского запроса (нативный запрос)?

Я пытался:

findByRecipientsContains (id) или

* * FindByRecipientsContaining тысячи двадцать-одина (ID)

но не повезло ...


EDIT:

Когда я использовал в хранилище:

Optional<List<Suggestion>> findByRecipientsIn(Long id);

также без Optional и в контроллере:

    @GetMapping("/employees/{id}/suggestions")
    @ResponseStatus(HttpStatus.OK)
    public List<Suggestion> getSuggestionsByRecipient(@PathVariable("id") Long id) {
        return suggestionRepository.findByRecipientsIn(id).get();
    }

Я получаю исключение следующим образом:

Parameter value element [1] did not match expected type [com.herokuapp.erpmesbackend.erpmesbackend.employees.Employee (n/a)]; nested exception is java.lang.IllegalArgumentException: Parameter value element [1] did not match expected type [com.herokuapp.erpmesbackend.erpmesbackend.employees.Employee (n/a)]] with root cause

1 Ответ

0 голосов
/ 12 сентября 2018

Это должно работать просто

findByRecipientsId(Long id)

Сравнить с этим тестом: https://github.com/spring-projects/spring-data-jpa/blob/688becd2b7129b853cd0deaf6bde3b50d9d8ce50/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java#L604

...