qaq123147 2015-05-09 03:42 采纳率: 0%
浏览 1491

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

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层保存的方法有问题?请大神不吝赐教!谢谢大家了。

  • 写回答

1条回答 默认 最新

  • 独执一叶 2015-05-09 07:25
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站