级联保存,在一方保存时无法把多方的Id同时保存。麻烦看看我的代码哪里有问题!

qaq123147 2015-05-09 11:00:11
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层保存的方法有问题?请大神不吝赐教!谢谢大家了。
...全文
174 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qaq123147 2015-05-09
  • 打赏
  • 举报
回复
没人帮我看看嘛?
qaq123147 2015-05-09
  • 打赏
  • 举报
回复
不会是因为今天是周末所以没人吧
qaq123147 2015-05-09
  • 打赏
  • 举报
回复
别沉了,这个问题都困扰了我一天了,如果有什么地方的代码要看的,我可以贴出来。谢谢大家了

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧