我有一个表里user 里面有 ID,SID两个字段  ID是自增的 然后还有一张表是po表 里面有 id,name,age三个字段
现在我要查询 SID=id的po表里面的集合。请问在hibernate的User.hbm.xml里面和User.java里面该如何映射这种关联关系 进行查询?

解决方案 »

  1.   

       user.hbm 配置
     <set name="roles" table="t_user_role">
                <key column="userid"></key>
                <many-to-many class="hbm.Role" column="roleid"></many-to-many>
            </set>
      class user
        private Set<Role> roles=new HashSet<Role>();
       role.hbm 配置
       <set name="users" table="t_user_role">
                <key column="roleid"></key>
                <many-to-many class="hbm.User" column="userid"></many-to-many>
            </set>
      class role 
       private Set<User> users=new HashSet<User>();
    //建个t_user_role表,放user跟role的id 
      在做user添加的时候,user.getroles要有role.roleid
     关联查询
    select user from User user left join fetch user.roles  
      

  2.   

    不好意思 感谢你的回复 我现在关联关系映射完了 可是又遇到一个问题 希望能找到解答就是我现在虽然查询到了需要显示的数据 比如 User表中的 id 和 po 表里面的name,age 可是我的方法是返回一个List<User> 用了泛型这样的话 我如何能取到 Set集合中映射的 name,age属性呢?
      

  3.   


    映射不上去 看不懂t_user_role这个表 还是用我给的那个 po 做一个关联吧 
    我就只是需要 在查询 user这个对象的时候 能把user表中SID字段对应PO表中的ID相同的数据都查出来就行了
      

  4.   

    刚给你的是多对多的关联
       你的是1对1的吧
      配置如下
      user.hbm 配置
       <one-to-one name="poid" class="po" update="true" insert="true"  fetch="select" cascade="all" />   
    po表的主键是引用user主键的外键,两张表的主键值必须相同。    
     
      

  5.   

    不是 应该是多对多 因为 user表的sid对应的po表中的id   比如说 sid有三行 1,2,3,2,1  而po表中的id是唯一的 比如 1,2,3,4,5 现在我就是想 通过查询user这个实体对象 来获取 user.id  po.name po.age 谢谢了 很急我现在是这样写的
    user.hbm.xml
      
            <set name="po" table="po_table" lazy="false" cascade="all">
                <key column="sid"/>
                <many-to-many class="pojo.Po" column="id"/>
            </set>po.hbm.xml
           <set name="user" table="user_table" lazy="false" cascade="all">
                <key column="id"/>
                <many-to-many class="pojo.User" column="sid"/>
            </set>
    这样一查询User对象就报错com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'po0_.sid' in 'field list'
      

  6.   

    是多对多关联
        1个用户可以有多个name ,一个name被多个用户所拥有
      你少了张表
      加张表t_user_po
      这张表只放userid 和poid ,不用主键
      user.hbm 配置
     <set name="pos" table="t_user_po">
      <key column="userid"></key>
      <many-to-many class="hbm.po" column="poid"></many-to-many>
      </set>
    //这句话的意思,在class user 中的pos存放着 t_user_po 中关联hbm.po的poid,关联建是userid
      class user
      private Set<po> pos=new HashSet<po>();
      po.hbm 配置
      <set name="users" table="t_user_po">
      <key column="poid"></key>
      <many-to-many class="hbm.User" column="userid"></many-to-many>
      </set>
    这句话的意思,在class po中的users存放着 t_user_po 中关联hbm.user的userid,关联建是poid
      class po
      private Set<User> users=new HashSet<User>();