在我的Spring项目中,我使用Spring Security。我有两个实体User和UserRole关系一对多。在实体中,这种关系是单向的。例如,我想获得具有Admin角色的用户列表。 我的实体:
cv::Mat
我使用Spring Data。我的查询在方法中调用:
cv::Mat image_on_proc = newpopulation(cv::Rect(0, start, population.cols, rows_in_section));
std::vector<byte> img = matToBytes(image_on_proc);
std::vector<uchar> test;
for(int i=0; i<image_on_proc.rows; i++)
{
for(int j=0; j<image_on_proc.cols; j++)
{
test.push_back(image_on_proc.at<uchar>(i,j));
}
}
MPI_Barrier(MPI_COMM_WORLD);
MPI_Send(&test[0],test.size()*sizeof(uchar), MPI_BYTE, 0, 99, MPI_COMM_WORLD);
,查询如下所示:
@Entity
@Table(name = "users")
public class User implements Serializable {
@JoinColumn(name = "userId")
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<UserRole> userRoleSet;
}
@Entity
@Table(name = "user_roles")
public class UserRole implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name = "id")
private Long id;
@Column(name = "name", nullable = false, unique = true, length = 40)
private String name;
}
我尝试使用表达式成员来获取具有Admin角色的用户,但它不起作用。我得到以下异常:
@Override
@Transactional(readOnly = true)
public List<User> getAdminList(String username) {
UserRole userRole = new UserRole("ROLE_ADMIN");
return userDao.getAdminList(userRole, username);
}
如何按角色获取用户列表?之前我的实体之间有双向关系,一切正常,但我认为在这种情况下不需要双向关系。如何用单向关系解决它?
答案 0 :(得分:1)
试试这个
@Query("SELECT u FROM User u WHERE u.id IN (SELECT ur.userId FROM UserRole ur WHERE ur.name = :role)")
List<User> getAdminList(@Param("role") String userRole);
和
@Override
@Transactional(readOnly = true)
public List<User> getAdminList() {
String roleName = "ROLE_ADMIN";
return userDao.getAdminList(roleName);
}
此外,您应该重构您的代码,因为命名方法getAdminList并将角色名称设置为参数是错误的,它应该被命名为getUserListByRoleName(String roleName)
修改强>
您还应该考虑使用三个表:users,user_roles和roles
因为现在您将为不同的用户复制相同的角色