В настоящее время я пытаюсь использовать @Query с выражением безопасности Spring для соответствия любому пользователю, который принадлежит к тому же региону / местоположению, что и зарегистрированный пользователь.
Я использую следующий код для достижения этой цели
@Override
@Query(value = "select u from User u where u.region in :#{principal.region}")
Page<User> findAll(Pageable var1);
Моя таблица пользователей имеет следующую связь с регионом
@ManyToMany( mappedBy = "users")
private List<Region> region = new ArrayList<>();
Моя таблица регионов имеет следующую связь с пользователями
@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinTable(name = "region_users", joinColumns = @JoinColumn(name = "region_id", referencedColumnName= "id"),
inverseJoinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id")
)
private List<User> users = new ArrayList<>();
мой пользовательский основной объект имеет следующее поле региона
private List<Region> region;
public UserPrincipal(Long id, String username, String password,
Collection<? extends GrantedAuthority> authorities, Role role, List<Region> region) {
this.id = id;
this.username = username;
this.password = password;
this.authorities = authorities;
this.role = role;
this.region = region;
}
со следующим методом get
public List<Region> getRegion() { return this.region; }
Когда я делаю запрос к конечной точке API, которая использует переопределенный метод find all, я получаю следующее исключение
Причина: java.lang.IllegalArgumentException: значение параметра [com.example.ReportTool.model.Region@18ab655a] не соответствует ожидаемому типу [java.util.Collection (n / a)]
Может кто-нибудь помочь мне с этим вопросом? Также, если этот вопрос слишком неопределенный, пожалуйста, дайте мне знать.