日期:2014-05-19  浏览次数:20717 次

求救,hiberate多对多关系的配置问题
Resume表 Rq表  
Id--简历编号 Id-----编号
Uid--用户编号 rid---简历编号
Dir---简历存放地址 rdir---简历存放地址
  qid----岗位编号

Quarter表
Id----岗位编号
cid----公司编号
name---岗位名称
require----能力要求
position----工作地点
sex----性别要求
experience----工作经验要求
education----学历
number----人数

Resume.hbm.xml 中多对多关系的配置代码部分
 <set name="quater" table="rq" cascade="all" inverse="true" lazy="true">
  <key>
  <column name="rid" not-null="true">
  <comment>????</comment>
  </column>
  </key>
  <many-to-many class="pojo.Quater" column="id">
  </many-to-many>
  </set>
Quater.hbm.xml 中多对多关系的配置代码部分
<set name="resume" table="rq" cascade="all" inverse="true" lazy="true">
  <key>
  <column name="qid" not-null="true">
  <comment>????</comment>
  </column>
  </key>
  <many-to-many class="pojo.Resume" column="id">
  </many-to-many>
  </set>
我在ResumeDao.java 对两个表进行关联的方法
public boolean resumeMail(Long rid,Long qid){
Transaction tx = session.beginTransaction();// 开始一个事务
try
{
Resume resume = (Resume)session.createQuery("from Resume r where r.id="+rid).uniqueResult();
Quater quater = (Quater)session.createQuery("from Quater q where q.id="+qid).uniqueResult();
resume.getQuater().add(quater);
quater.getResume().add(resume);
tx.commit();
return true;
}catch(Exception e){
e.printStackTrace();
tx.rollback();
return false;
}
}
结果运行没问题,可是rq表里面却一直没记录····不知道为什么····

------解决方案--------------------
Hibernate 维护的对象与对象之间的关系, 为什么你的实体当中要将对象拆开,用字段引用?
Resume表
Id--简历编号 ---------- 这里应该用Quarter对象, 而具体的映射由配置文件决定,比如uid --> Quarter.id
Uid--用户编号
Dir---简历存放地址

Resume.hbm.xml 中多对多关系的配置代码部分 
<set name="quater" table="rq" cascade="all" inverse="true" lazy="true"> 
<key> 
<column name="rid" not-null="true"> 
<comment>???? </comment> 
</column> 
</key> 
<many-to-many class="pojo.Quater" column="id"> 
(在关系表中体现 rid 对 Quarter.id 的外键引用)
</many-to-many> 
</set> 
还有,多对多关系是需要中间表来维护的,如果是双向多对多关系的话, Hibernate 需要手工指定双方是由同一个中间表维护,不然会出现两个毫无干系的多对一关系
------解决方案--------------------
Resume resume = (Resume)session.createQuery("from Resume r where r.id="+rid).uniqueResult(); 
Quater quater = (Quater)session.createQuery("from Quater q where q.id="+qid).uniqueResult(); 
resume.getQuater().add(quater); 
quater.getResume().add(resume); 
还有你这样操作后?resume,quater均变为临时对象,并没有持久化的过程,怎么能保存到数据库呢?
你的resume,和q