public class Group extends BaseEntity {
private String name; // 用户组名
private String describe;
private Set<Role> roles=new HashSet<Role>();  //组与角色(多对多)
        .....
}
public class Role extends BaseEntity {
private String name; // 角色名
private String lxDescribe;
private Set<Group> groups = new HashSet<Group>(); // 角色与组(多对多)
        ...
}
<hibernate-mapping>
<class name="com.lxitedu.entity.group.Group" table="LXGroup" lazy="false">
<id name="id" type="long">
<generator class="native"></generator>
</id>
<property name="name" column="LXName"></property>
<property name="describe" column="LXDescribe"></property>
<set name="roles" table="role_group" cascade="all">
<key column="group_id"></key>
<many-to-many column="role_id" class="com.lxitedu.entity.role.Role"></many-to-many>
</set>
</class>
</hibernate-mapping><hibernate-mapping>
<class name="com.lxitedu.entity.role.Role" table="LxRole" lazy="false">
<id name="id" type="long">
<generator class="native"></generator>
</id>
<property name="name" type="java.lang.String"></property>
<property name="lxDescribe" type="java.lang.String" column="lxDescribe"></property>
<set name="groups" table="role_group">
<key column="role_id"></key>
<many-to-many column="group_id" class="com.lxitedu.entity.group.Group"></many-to-many>
</set>
<set name="users" table="role_user" inverse="true" cascade="all">
<key column="role_id"></key>
<many-to-many column="user_id" class="com.lxitedu.entity.user.User"/>
</set>
</class>
</hibernate-mapping>多对多,我保存做好了了,但是多对多的查询不知道做?那位大哥知道告诉我,分少了我就再加!
public List getAllGroup() {
      return getHibernateTemplate().loadAll(Group.class);
 }
这样做对不对?好像不能查出来

解决方案 »

  1.   

    首先要告诉你,你的思路都错了
    如果要是在数据库端设计
    用户组和角色之间是多对多的关联关系,这两张表之间最好不要直接关联,应该设置一张关联表来表达用户组表与角色表之间的关联,
    这样在Hibernate中,设置的时候,用户组实体与关联对象之间关联(多对一),角色也与关联对象关联(多对一),这样设计就比较清楚了。
    当你打算做多对多关联的时候,必须要设置一个关联表,这样做才最合理。
      

  2.   

    我有一个关联表group_user,你可能没有看到,我用的是many-many,
      

  3.   

    我没用过你设置的这个方法,再说你这里边有很大的问题
    <set name="groups" table="role_group"> 
    <key column="role_id"> </key> 
    <many-to-many column="group_id" class="com.lxitedu.entity.group.Group"> </many-to-many> 
    </set>
    你这里group_id的类型应该是个集合吧,集合中存在的类型应该是关联类的类型,可这里边你写的还是组类型建议
    用户组配置文件
    <set name="groups"> 
    <key column="role_id"> </key> 
    <on-to-many column="group_id" class="com.lxitedu.entity.group.Role_Group"> </many-to-many> 
    </set>关联配置文件
    <many-to-one>用户角色采用
    <set>
      <on-to-many>
    </set>要特别注意集合中放置的是什么类型
      

  4.   

    我有一个界面是显示所用的group
    如下:
    组名,角色名(可以有多个),组描述单独只显示组里的信息我可以做到,还要把Set里对应的角色信息显示出来,我不知道怎么做
      

  5.   

    用户组这个实体里存放的有个set的集合类型是关联类
    关联类中存放由用户组和用户角色的对象
    用户角色中存放的也有一个set的集合,集合类型也是关联类
    那么你就可以考虑一下用户组可以得到关联类,再根据关联类的每个用户角色对象,当然可以得到用户角色了
    很多做权限的时候,这样设计才是最普遍合理的设计
      

  6.   

    多对多的查询就根据你的需求了,看你根据什么参数来查询了
    下面的代码是根据组名查询其所有角色
    public List getRoles(String groupName) { 
          return getHibernateTemplate().find("select g.roles from Group g where g.name=?",groupName);
    }
      

  7.   

    1.今天完成了多对多的功能(修改还没有做)
    2.在项目设计中与到了点问题,role,role_group,group
    role与group是多对多的,role_group是中间表,我删除一个条role数据把与之关联的group表的数据也删除了,而删除role表数据时它也把group表相关联的数据给删除了,
    role是父表,group是从表,
    我现在想这么做:删除role表里的数据,group与之对应的也删除 ,而删除group表里的数据,role表里的数据不动,只删除role_group表里的数据,不知道怎么控制?以前的问题我解决了,是lazy位置的问题...分不够我可以加,如果你们以前做过这样的例题就更好...
      

  8.   

    我也遇到这个问题了,请问楼主怎么解决的?多对多查询的例子贴出来看看,或者发我邮箱[email protected]谢谢了