Я использую spring-boot
, spring-data-JPA
и Hibernate
, и у меня есть Form Entity
и Group Entity
, и между ними есть @ManyToMany
связь.
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name = "form_group",
joinColumns = @JoinColumn( name = "form_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "group_id", referencedColumnName = "id"))
@JsonIgnore
private Collection<Group> groups;
В классе FormRepository
у меня есть метод с именем public List<Form> findByGroups(Collection<Group> userGroups);
, который принимает параметр типа Collection<Group>
и, как ожидается, вернет все формы, которые принадлежат хотя бы к одной из групп, переданных в качестве параметра метода.Вот запрос:
@Query("SELECT new com.nsia.model.Form(f.id, f.name, f.description, f.createdAt, f.groups, COUNT(i.id)) from Form f LEFT JOIN f.instances i WHERE f.groups IN (?1) group by f.id")
Как видите, userGroups
имеет тип Collection<Group>
, а внутри Form Entity
он того же типа.Когда вызывается метод findByGroup
, он выдает java.lang.IllegalArgumentException
и вот полное сообщение:
java.lang.IllegalArgumentException: Parameter value [Group {id=4, name='DATA_ENTRY_GROUP', description='DATA ENTRY GROUP'}] did not match expected type [java.util.Collection (n/a)]
Я уверен, что userGroups
имеет тип Collection<Group>
, потому что вот как яя получаю его в классе FormServiceImpl
:
Collection<Group> groups = userService.getLoggedInUser().getGroups();
formsList = formRepository.findByGroups(groups);
В StackOverflow есть много похожих вопросов, и я попробовал каждый из них, и ни один из них не помог мне, любая помощь будет высоко оценена.БЛАГОДАРЯ