2张表.多对多关系.同时插入.第一张表先一步插.
第二张表可能要插多条记录.等第一张表
插入成功后再插.然后关联上中间表.
一般顺序是先关联中间表再插入第二张表的数据.运行后报错:错误代码就不贴出来了.
错误的意思是:找不到第二张表的ID.打印第二张的ID也是null.PersonInfo.hbm.xml<set name="houseinfos" table="PERSON_HOUSE" schema="SYRKXX" inverse="false" cascade="save-update, delete">
 <key>
    <column name="PID" precision="22" scalo="0" not null="true" />
 </key>
<many-to-many entity-name="......">
  <column name="HOUSE_ID" not-null="true"/>
</many-to-many>
</set>
HouseInfo.hbm.xml <set name="personInfos" table="PERSON_HOUSE" schema="SYRKXX" inverse="true" lazy="false">
 <key>
    <column name="HOUSE_ID" precision="22" scalo="0" not null="true" />
 </key>
<many-to-many entity-name="......">
  <column name="PID" not-null="true"/>
</many-to-many>
</set>先插入houseinfo的信息.只有一条houseinfodao.insertHouse(houseinfoForm);
再插入personinfo的信息,可能多条string[] xm = request.getParameterValues("xm");
for(int i=0;i<xm.length;i++){
 PersonInfo personinfo = new PersonInfo(xm[i]);personinfo.getHouseInfos().add(HouseinfoForm);personinfodao.insertPerson(personinfo);
}具体代码就是这样.
插入的时候就报中间表的 PID:
integrity constraint (xxxx.FK_PERSON_ID ) violated - parent key not found;请教高手我哪配置或写法有问题.
谢谢了.
100分.求解!

解决方案 »

  1.   

    你的对象的id是否在另一个表中存在,打印下,或者说你的对象是不是都有ID了,因为hibernate外键存的就是id值
      

  2.   

    personinfo.setHouseinfo(houseinfo);personinfodao.insertPerson(personinfo);
      

  3.   

    关联的时候第二个表的ID是还不存在的.所以报:
    integrity constraint (xxxx.FK_PERSON_ID ) violated - parent key not found;但是hibernate多对多就是要先ADD关联中间表 再insert第二张主表,这样的顺序之前我也做过这样的项目,都没错.现在报这样的错我也不清楚到底错在哪了!
      

  4.   

    既然你都配置双向多对多了,那你把一边赋值到另一边。只插入另一边的,hibernate会自动把一边的插入进去。
      

  5.   

    就算我设置了双向ADD都没用...求教高人啊.
      

  6.   

    求解啊.CSDN各位达人.帮个忙啊,100分奉上!
      

  7.   

    那是你映射文件不对,你在many-to-many里面设置一个cascade="all"。
      

  8.   

    都一样的错. 而且我都设置了save-update, delete 了.
      

  9.   

    cascade="save-update, delete"何不直接写成cascade="all"呢?
      

  10.   


    谨慎啊,级联了还都托管与对方,all的话很危险的,
      

  11.   

    你把映射文件类没一个写一个Set  再进行管理那张表进行插入,每张表都要有数据哦