求救,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