求一hibernate 简单映射关联关系的配置。 我有一个表里user 里面有 ID,SID两个字段 ID是自增的 然后还有一张表是po表 里面有 id,name,age三个字段现在我要查询 SID=id的po表里面的集合。请问在hibernate的User.hbm.xml里面和User.java里面该如何映射这种关联关系 进行查询? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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 不好意思 感谢你的回复 我现在关联关系映射完了 可是又遇到一个问题 希望能找到解答就是我现在虽然查询到了需要显示的数据 比如 User表中的 id 和 po 表里面的name,age 可是我的方法是返回一个List<User> 用了泛型这样的话 我如何能取到 Set集合中映射的 name,age属性呢? 映射不上去 看不懂t_user_role这个表 还是用我给的那个 po 做一个关联吧 我就只是需要 在查询 user这个对象的时候 能把user表中SID字段对应PO表中的ID相同的数据都查出来就行了 刚给你的是多对多的关联 你的是1对1的吧 配置如下 user.hbm 配置 <one-to-one name="poid" class="po" update="true" insert="true" fetch="select" cascade="all" /> po表的主键是引用user主键的外键,两张表的主键值必须相同。 不是 应该是多对多 因为 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' 是多对多关联 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>(); ssi框架配置文件的问题 struts2 session 问题 求一个关于application session pagecontext的具体分析 各路大神快现身!Java读取Oracle数据乱码问题! java和C++的问题,专家请进. 向高手请教,asant run和java的区别 5天学会J2EE,就是不知道Servlet是怎么回事? 在上海,熟悉struts和hibernate的朋友请进 怎样让applet把文件写到服务器上?? JMS如何在一个项目内部使用? jsp,拿map中的value。 lucene报异常java.io.IOException: read past EOF
<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
映射不上去 看不懂t_user_role这个表 还是用我给的那个 po 做一个关联吧
我就只是需要 在查询 user这个对象的时候 能把user表中SID字段对应PO表中的ID相同的数据都查出来就行了
你的是1对1的吧
配置如下
user.hbm 配置
<one-to-one name="poid" class="po" update="true" insert="true" fetch="select" cascade="all" />
po表的主键是引用user主键的外键,两张表的主键值必须相同。
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'
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>();