级联保存,看看我哪里错了!谢谢大家

hibernate交给Spring管理
我的任务类.hbm.xml

 <class name="my.sys.xmgl.assignment.entity.AdcAssignment" table="adc_assignment">
        <id name="assigId" type="java.lang.Integer">
            <column name="assigId" />
            <generator class="native" />
        </id>
        <many-to-one name="project" class="my.sys.xmgl.project.entity.AdcProjects">
            <column name="project_id" />
        </many-to-one>
        <property name="name" type="java.lang.String">
            <column name="name" length="20" />
        </property>
        <property name="createtime" type="java.util.Date">
            <column name="createtime" length="10"  />
        </property>
        <property name="isRelease" type="java.lang.Boolean">
            <column name="isRelease" />
        </property>
        <property name="state" type="java.lang.String">
            <column name="state" length="1" />
        </property>
        <property name="memo" type="java.lang.String">
            <column name="memo" length="200" />
        </property>

项目类.hbm.xml

 <class name="my.sys.xmgl.project.entity.AdcProjects" table="adc_projects">
        <id name="projectId" type="java.lang.Integer">
            <column name="project_id" />
            <generator class="native" />
        </id>

        <property name="name" type="java.lang.String">
            <column name="name" length="20" not-null="true" />
        </property>
        <property name="baseyear" type="java.lang.String">
            <column name="baseyear" length="4" not-null="true" />
        </property>
        <property name="basemonth" type="java.lang.String">
            <column name="basemonth" length="2" not-null="true" />
        </property>
        <property name="baseday" type="java.lang.String">
            <column name="baseday" length="2" not-null="true" />
        </property>
        <property name="scale" type="java.util.Date">
            <column name="scale" length="10"/>
        </property>
        <property name="createtime" type="java.util.Date">
            <column name="createtime" length="10"/>
        </property>
        <property name="state" type="java.lang.String">
            <column name="state" length="1" />
        </property>
        <property name="finishtime" type="java.util.Date">
            <column name="finishtime" length="10"/>
        </property>
        <property name="isArchived" type="java.lang.Boolean">
            <column name="isArchived" length="1"/>
        </property>
        <property name="memo" type="java.lang.String">
            <column name="memo" length="200" />
        </property>

        <set name="adcassignments" lazy="false" cascade="save-update,delete">
            <key>
                <column name="project_id"/>
            </key>
            <one-to-many class="my.sys.xmgl.assignment.entity.AdcAssignment"/>
        </set>
    </class>

我在任务的添加页面有一个单选框,拿到项目的id,然后传给Action,我觉得是不是我的serviceimpl有问题。

dao层

 @Override
    public void saveAssignmentProjectId(AdcAssignment assignment) {
        getHibernateTemplate().save(assignment);
    }

service层

 @Override
    public void saveAssignmentProjectId(AdcAssignment assignment,Integer... projectIds) {
        save(assignment);
        if (projectIds != null) {
            for (Integer projectId : projectIds) {
                assignmentDao.saveAssignmentProjectId(new AdcAssignment(assignment.getAssigId(),new AdcProjects(projectId)));
            }
        }
    }

运行时发现执行了2条SQL

 Hibernate: insert into adc_assignment (project_id, name, createtime, isRelease, state, memo) values (?, ?, ?, ?, ?, ?)
Hibernate: insert into adc_assignment (project_id, name, createtime, isRelease, state, memo) values (?, ?, ?, ?, ?, ?)

然后因为我的属性是不能为空的,所以他报错了。如果我设置全部属性能空值时,数据库里面就保存了2条数据,一条是任务全部信息的,一条是只有任务ID和项目ID。
为什么会出现这种问题?是不是我的service层保存的方法有问题?请大神不吝赐教!谢谢大家了。

要想达到级联保存的效果,需要在“多”的一方配置cascade=“save-update”;“一”的一方配置inverse=“true”