是的。这是有意的。数据作为嵌套对象映射到 Java 对象。因此,5 个用户记录的可分页将返回 5 个用户,而与每个用户拥有的角色数量无关。
要通过用户和角色的组合来限制基于记录计数的分页,您必须将用户和角色之间的连接添加到存储库方法中的查询中,并从用户和角色中获取列(就像我们在 SQL 中所做的那样)。
下面的代码对我有用
用户实体
public class User
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long userId;
@NonNull
@Column(unique = true, name= "user_name")
private String userName;
@NonNull
private String password;
@NonNull
private boolean status;
@NonNull
private boolean passwordExpired;
@ManyToMany(fetch=FetchType.EAGER,cascade = CascadeType.ALL)
@JoinTable(name = "user_role", joinColumns = {
@JoinColumn(name = "userId", referencedColumnName = "userId") }, inverseJoinColumns = {
@JoinColumn(name = "role_name", referencedColumnName = "name") })
@BatchSize(size = 20)
private Set<Role> roles = new HashSet<>();
//Get and set
}
角色实体
public class Role {
private static final long serialVersionUID = 1L;
@NotNull
@Size(max = 50)
@Id
@Column(length = 50,unique=true)
private String name;
//get and set
}
存储库
@Repository
public interface UserRepo extends JpaRepository<User, Long>
{
@Query(value="SELECT u.userName,r.name FROM User u left join u.roles r")
public ArrayList<User> findByrole(Pageable paging);
}
服务方式
public ArrayList<User> findByrole()
{
// TODO Auto-generated method stub
Pageable paging = PageRequest.of(0, 4);
return uRepo.findByrole(paging);
}