我目前正在尝试将@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; }
当我向使用覆盖的find所有方法的api端点发出请求时,出现以下异常
原因:java.lang.IllegalArgumentException:参数值[com.example.ReportTool.model.Region@18ab655a]与预期的类型[java.util.Collection(n / a)]不匹配
有人可以帮助我解决这个问题吗?如果这个问题太含糊,也请让我知道。