这里是many方的hbm.xml<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                                   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
 <class catalog="crm" name="com.crm.hibernate.pojo.SysRoleRight" table="sys_role_right">
  <id name="rfId" type="java.lang.Integer">
   <column name="rf_id"/>
   <generator class="native"/>
  </id>
  <property generated="never" lazy="false" name="rfRightCode" type="java.lang.String">
   <column length="50" name="rf_right_code" not-null="true"/>
  </property>
  <many-to-one class="com.crm.hibernate.pojo.SysRole" name="sysRole"
   column="rf_role_id" unique="true"/>
 </class>
</hibernate-mapping>
这里是one方的hbm.xml文件<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.crm.hibernate.pojo.SysRole" table="sys_role">
        <id name="roleId" type="java.lang.Integer">
            <column name="role_id" />
            <generator class="native" />
        </id>
        <property name="roleName" type="java.lang.String">
            <column name="role_name" length="50" not-null="true" />
        </property>
        <property name="roleDesc" type="java.lang.String">
            <column name="role_desc" length="50" />
        </property>
        <set name="sysRoleRight" cascade="all" inverse="true"
         table="sys_role_right" lazy="false">
         <key column="rf_role_id" not-null="true" />
         <one-to-many class="com.crm.hibernate.pojo.SysRoleRight" />
        </set>
    </class>
</hibernate-mapping>
插入的时候one方可以插入,但是在插入many方的时候
报异常:Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'rf_role_id' cannot be null

解决方案 »

  1.   

    记得是要把ONE的整个对象作为MANY的属性,再保存MANY才可以插入,你检查下代码
      

  2.   

    这些Mapping file可以根据数据库自动生成的,不用自己写的
      

  3.   

    下面是many方的pojo类package com.crm.hibernate.pojo;public class SysRoleRight implements java.io.Serializable { private static final long serialVersionUID = 8213780900848505406L;
    private Integer rfId;
    private String rfRightCode;
    private SysRole sysRole; public SysRole getSysRole() {
    return sysRole;
    } public void setSysRole(SysRole sysRole) {
    this.sysRole = sysRole;
    } public Integer getRfId() {
    return this.rfId;
    } public void setRfId(Integer rfId) {
    this.rfId = rfId;
    } public String getRfRightCode() {
    return this.rfRightCode;
    } public void setRfRightCode(String rfRightCode) {
    this.rfRightCode = rfRightCode;
    }
    }
      

  4.   

    这个是one方的pojo类package com.crm.hibernate.pojo;import java.util.Set;public class SysRole implements java.io.Serializable { private static final long serialVersionUID = -5406134208542261539L;
    private Integer roleId;
    private String roleName;
    private String roleDesc;
    private Set<SysRoleRight> sysRoleRight ;
    public Set<SysRoleRight> getSysRoleRight() {
    return sysRoleRight;
    } public void setSysRoleRight(Set<SysRoleRight> sysRoleRight) {
    this.sysRoleRight = sysRoleRight;
    } public SysRole(String roleName, String roleDesc) {
    this.roleName = roleName;
    this.roleDesc = roleDesc;
    } public Integer getRoleId() {
    return this.roleId;
    } public void setRoleId(Integer roleId) {
    this.roleId = roleId;
    } public String getRoleName() {
    return this.roleName;
    } public void setRoleName(String roleName) {
    this.roleName = roleName;
    } public String getRoleDesc() {
    return this.roleDesc;
    } public void setRoleDesc(String roleDesc) {
    this.roleDesc = roleDesc;
    }
    }