org.hibernate.id.IdentifierGenerationException: attempted to assign id from null one-to-one property: organ
一对一双向关联 在同一个jsp页面向两个数据库添加数据时报这个异常 会的帮忙解决下 琢磨了一下午了  配置文件  organ_detail配置文件
  <class name="com.softeem.entity.OrganDetail" table="organ_detail" schema="dbo" catalog="liutao" >
  <id name="odId" type="java.lang.Integer">
  <column name="od_id" />
  <generator class="foreign" >
  <param name="property">organ</param>
  </generator>
  </id>
  <one-to-one name="organ" class="com.softeem.entity.Organ" lazy="false" cascade="all" constrained="true"
organ配置问价
 <class name="com.softeem.entity.Organ" table="organ" schema="dbo" catalog="liutao" lazy="false" >
  <id name="organId" type="java.lang.Integer">
  <column name="organ_id" />
  <generator class="native" />
  </id>jsp页面:
<body bgcolor="#fef4d9">
  <h1 align="center">添加部门信息</h1>
  <s:form action="OrganAction!addOrgan" method="post" theme="simple">
  <table align="center" border="1" >
  <tr><td align="center" colspan="2">部门信息</td></tr>
  <tr><td>部门名称</td><td><s:textfield key="organ.organName"></s:textfield></td></tr>
  <tr><td>部门机构编码</td><td><s:textfield key="organ.organCode"></s:textfield></td></tr>  
  <tr><td>上级机构编码</td><td><s:textfield key="organ.organFcode"></s:textfield></td></tr>
  <tr><td align="center" colspan="2">详细信息</td></tr>
  <tr><td>机构地址 </td><td><s:textfield key="organ.organDetail.odAddress"></s:textfield></td></tr>
  <tr><td>联系方式</td><td><s:textfield key="organ.organDetail.odRelation"></s:textfield></td></tr>
  <tr><td>隶属关系</td><td><s:textfield key="organ.organDetail.odAttach"></s:textfield></td></tr>
  <tr><td>机构级别</td><td><s:textfield key="organ.organDetail.odLevel"></s:textfield></td></tr>
  <tr><td>主管单位名称</td><td><s:textfield key="organ.organDetail.odManageName"></s:textfield></td></tr>
  <tr><td>部门性质</td><td><s:textfield key="organ.organDetail.odKind"></s:textfield></td></tr>
  <tr><td align="center" colspan="2"><s:submit value="添加"></s:submit></td></tr>
  </table>
  </s:form>
  </body>java代码:调用的是添加方法
public class OrganAction extends ActionSupport {
private Organ organ =new Organ();
private OrganDetail odl =new OrganDetail();
private PageInfo pageInfo=new PageInfo();//分页信息
private ArrayList<Organ> organs;
public OrganDetail getOdl() {
return odl;
}
public void setOdl(OrganDetail odl) {
this.odl = odl;
}
public Organ getOrgan() {
return organ;
}
public void setOrgan(Organ organ) {
this.organ = organ;
}
public PageInfo getPageInfo() {
return pageInfo;
}
public void setPageInfo(PageInfo pageInfo) {
this.pageInfo = pageInfo;
}
public ArrayList<Organ> getOrgans() {
return organs;
}
public void setOrgans(ArrayList<Organ> organs) {
this.organs = organs;
}
/**
* 添加部门
* @return
*/
  public String addOrgan()throws Exception{
  OrganDAO organdao = new OrganDAO();
  OrganDetailDAO odldao = new OrganDetailDAO();
  organdao.insert(organ);
// odl.setOdId(organ.getOrganId());
// odldao.insert(odl);
  return queryOrganAll();
  }
  /**
  * 查询所有部门
  * @return
  */
  public String queryOrganAll()throws Exception{
  OrganDAO organdao = new OrganDAO();
  organs = (ArrayList<Organ>) organdao.findByPage(pageInfo);
// for(Organ organ:organs){
// System.out.println(organ.getOrganDetail()+"+++++++++++++++++++++++++++++++++");
// System.out.println(organ.getOrganName()+"++++++++++++++++++++++++++++++++++++++++++++++");
// }
  return "queryOrganAll";
    
  }
}报的异常:org.hibernate.id.IdentifierGenerationException: attempted to assign id from null one-to-one property: organ

解决方案 »

  1.   

    organdao.insert(organ);
    没有给ID
      

  2.   

    你要先添加organ_detail表再添加organ表信息
    把OrganAction!addOrgan改成OrganAction!addOrgan_detail,具体你自己定义叫什么名字就写什么名字
      

  3.   

    “你要先添加organ_detail表再添加organ表信息”
    刚先后顺序写错了
      

  4.   

    回2楼和3楼的朋友 organdetial表的id是根据organ表的id来的啊 主表的id还没生成你附表怎么可能有id呢?就跟身份证一样 没人哪来的身份证哦
      

  5.   

    <id name="odId" type="java.lang.Integer">
      <column name="od_id" />
    你这里有自动生成ID吗??
      

  6.   

    回6楼我现在90多张表 不能该了 关键是我odid的设置了外键关联的 怎么还是空了呢?有点搞不明白了