首先说明表关系:
Chickling为外键表;ChicklingManufecturer为主键表;
外键表ManufecturerNumber字段与主键表关联;
<many-to-one name="chicklingManufecturer" class="manufecturerPojo.ChicklingManufecturer" fetch="select">
            <column name="ManufecturerNumber" length="50" />
        </many-to-one>
Chickling表有非自增的主键ChicklingNumber,本身作为ChicklingNumber表的主键表;
 <id name="chicklingNumber" type="java.lang.Integer">
            <column name="ChicklingNumber" />
            <generator class="identity" />
        </id>
      <set name="productTraceInfos" inverse="true">
            <key>
                <column name="ChicklingNumber" />
            </key>
            <one-to-many class="pojo.ProductTraceInfo" />
        </set>现在我要向Chickling中插入数据,Action中的代码我这样写的:  chickling.setBatch("1");
ChicklingManufecturer CM= new ChicklingManufecturer();//创建子表对象
CM.setManufecturerName("1");//设置子表的主键值
chickling.setChicklingNumber(new Integer(5));
chickling.setChicklingManufecturer(CM);
chickling.setChicklingName("123");
chickling.setDate(new Date());
chickling.setGgeneration("gg");
chickling.setIncubatorNumber("123");
chickling.setInputNumber(new Integer(1));
chickling.setPgerneration("456");
chickling.setRe("re");
Service.Save(chickling);
异常如下:
Hibernate: insert into TraceSystem.dbo.Chickling (ManufecturerNumber, Date, Batch, GGeneration, PGerneration, ChicklingName, Re, IncubatorNumber, InputNumber) values (?, ?, ?, ?, ?, ?, ?, ?, ?)
org.springframework.dao.DataIntegrityViolationException: could not insert: [pojo.Chickling]; nested exception is org.hibernate.exception.ConstraintViolationException: could not insert: [pojo.Chickling]
Caused by: org.hibernate.exception.ConstraintViolationException: could not insert: [pojo.Chickling]Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 不能将值 NULL 插入列 'ChicklingNumber',表 'TraceSystem.dbo.Chickling';列不允许有空值。INSERT 失败。从显示的SQL语句可以看出它没有去插入主键值.我很奇怪为什么.不可能是因为是主键所以不能插入吧?我又没设置为自增的.还有问题就是,我传入了一个子表的对象如果我保存Chickling对象时,会不会在子表中也出现一条记录?
同样如果我删除会不会删除一条对应的记录?
我猜是不会...但是还是请前辈们指教.
小弟第一次做这样几张表关联的东西,弄的很郁闷...如果有什么经验,还望前辈们指点.

解决方案 »

  1.   

    Chickling表有非自增的主键ChicklingNumber,本身作为ChicklingNumber表的主键表; 
    这句话发错了
    Chickling表有非自增的主键ChicklingNumber,本身作为ChicklingInfo表的主键表; 
      

  2.   

    你既然表中没有设置自动增长的,而且映射文件中也没有设置自动增长的
    那么就更应该要显示的插入ChicklingNumber的值啦
    ChicklingNumber又是表的主键,你说主键能为空么??
      

  3.   

    <generator class="identity" />
    主键生成策略error
    这种是要求DB有标识和步长的那种,你自己指定要 <generator class="assigned " />级联你也没配置你的担心纯属多余。