如何为ManyToMany属性的分页输出编写选择查询

时间:2010-02-10 04:09:18

标签: hibernate orm jpa

我有一个Group表,通过连接表与User表有ManyToMany关系。一个组可以包含很多用户,也可以包含包含更多用户的子组。

我正在使用JPA,Hibernate 3.3

  1. 如何对Group.getUsers()返回的结果进行分页,这些结果可以是通过Group.getUsers获取的用户,也可以是Group.getGroups中子组的所有用户
  2. 注意:由于我已将此表达为ManyToMany关系,因此我没有实体表(对于连接表),也不确定如何在连接表上使用JPA执行任何查询。

    @Entity
    @Table(name = "group")
    public class Group {
    
        @Id
        @GeneratedValue(strategy = IDENTITY)
        @Column(name = "id", unique = true, nullable = false, insertable = false, updatable = false)
        private Integer id;
    
        @Column(name = "name", length = "255", nullable = false)
        private String name;
    
        @ManyToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, fetch = FetchType.LAZY)
        @JoinTable(name = "group_user", joinColumns = @JoinColumn(name = "group_id"), inverseJoinColumns = @JoinColumn(name = "user_id"))
        private List<User> users = new ArrayList<User>(0);
    
    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinTable(name = "group_subgroup", joinColumns = @JoinColumn(name = "src_group_id"), inverseJoinColumns = @JoinColumn(name = "target_group_id"))
    private List<Group> groups = new ArrayList<Group>(0);
    

1 个答案:

答案 0 :(得分:1)

您可以在用户实体中添加private List<Group> groups(懒惰)。并且,对于团体来说:

`SELECT u FROM User u JOIN u.groups g WHERE g=:group`

和子组:

`SELECT u FROM User u JOIN u.groups WHERE g IN (:groups)`

(并致电query.setParameter("groups", group.getGroups())