hibernate执行saveorupdate时出现问题

xiaoyejiade 2013-01-13 12:03:04
我的save方法是这样定义的:
public Object save(Object entity) {
try {
getHibernateTemplate().saveOrUpdate(entity);
getHibernateTemplate().flush();
} catch (DataAccessException dataaccessexception) {
if (log.isDebugEnabled())
dataaccessexception.printStackTrace();
else
log.error("保存 [" + entity.getClass().getName() + "] 到数据库失败", dataaccessexception);
throw new PersistenceException("保存 [" + entity.getClass().getName() + "] 到数据库失败", dataaccessexception);
}
return entity;

}


现在有两个表有主外键关系,分别是模板表(ZHYW_JJRZBGL_MBXX)、模板项目表(ZHYW_JJRZBGL_MBXXXM)

这两个表的配置文件:

<hibernate-mapping>
<class name="com.ecomm.zhyw.jjrzbgl.jjrrwmb.pojo.Mbxx" table="ZHYW_JJRZBGL_MBXX">
<!-- ID -->
<id name="id" type="java.lang.String">
<column name="ID" length="32"></column>
<generator class="uuid.hex" />
</id>

<!-- 创建单位 -->
<property name="v_mbcjdw" type="java.lang.String">
<column name="V_MBCJDW" length="200"></column>
</property>

<!-- 创建人 -->
<property name="v_mbcjr" type="java.lang.String">
<column name="V_MBCJR" length="200"></column>
</property>

<!-- 创建日期 -->
<property name="d_mbcjrq" type="java.util.Date">
<column name="D_MBCJRQ"></column>
</property>

<!-- 任务标题 -->
<property name="v_rwbt" type="java.lang.String">
<column name="V_RWBT" length="200"></column>
</property>

<!-- 模板项目 -->
<list name="xms" cascade="save-update" inverse="true" lazy="true">
<key column="V_XMMB" not-null="true"/>
<index column="position"></index>
<one-to-many class="com.ecomm.zhyw.jjrzbgl.jjrrwmb.pojo.Mbxxxm"/>
</list>
</class>
</hibernate-mapping>

<hibernate-mapping>
<class name="com.ecomm.zhyw.jjrzbgl.jjrrwmb.pojo.Mbxxxm" table="ZHYW_JJRZBGL_MBXXXM">
<!-- ID -->
<id name="id" type="java.lang.String">
<column name="ID" length="32"></column>
<generator class="uuid.hex" />
</id>

<!-- 上级项目id -->
<property name="v_parentid" type="java.lang.String">
<column name="V_PARENTID" length="200"></column>
</property>

<!-- 项目标题 -->
<property name="v_xmmc" type="java.lang.String">
<column name="V_XMMC" length="200"></column>
</property>

<!-- 项目单位 -->
<property name="v_xmdw" type="java.lang.String">
<column name="V_XMDW" length="50"></column>
</property>

<!-- 备注 -->
<property name="v_xmbz" type="java.lang.String">
<column name="V_XMBZ" length="200"></column>
</property>
<!-- 所属模板 -->
<many-to-one name="mbxx" class="com.ecomm.zhyw.jjrzbgl.jjrrwmb.pojo.Mbxx"
cascade="all" outer-join="auto" update="true" insert="true">
<column name="V_XMMB" length="200" ></column>
</many-to-one>
</class>
</hibernate-mapping>

form是这样定义的:(因为jdk是1.4的,所以用到AutoArrayList)
public class MbxxForm extends ActionForm {

/**
* ID
*/
private String id;

/**
* 创建单位
*/
private String v_mbcjdw;

/**
* 创建人
*/
private String v_mbcjr;

/**
* 创建日期
*/
private Date d_mbcjrq;

/**
* 任务标题
*/
private String v_rwbt;

/**
* 项目列表
*/
private List xms = new AutoArrayList(Mbxxxm.class);

public void setXms(List xms)
{
this.xms.clear();
this.xms.addAll(xms);
}

/**
* @param String
*/
public void setId(String id){
this.id=id;
}

/**
* @return String
*/
public String getId(){
return this.id;
}

/**
* @param String
*/
public void setV_mbcjdw(String v_mbcjdw){
this.v_mbcjdw=v_mbcjdw;
}

/**
* @return String
*/
public String getV_mbcjdw(){
return this.v_mbcjdw;
}

/**
* @param String
*/
public void setV_mbcjr(String v_mbcjr){
this.v_mbcjr=v_mbcjr;
}

/**
* @return String
*/
public String getV_mbcjr(){
return this.v_mbcjr;
}

/**
* @param Date
*/
public void setD_mbcjrq(Date d_mbcjrq){
this.d_mbcjrq=d_mbcjrq;
}

/**
* @return Date
*/
public Date getD_mbcjrq(){
return this.d_mbcjrq;
}

/**
* @param String
*/
public void setV_rwbt(String v_rwbt){
this.v_rwbt=v_rwbt;
}

/**
* @return String
*/
public String getV_rwbt(){
return this.v_rwbt;
}


public List getXms() {
return xms;
}

}

最后是action:
public ActionForward save(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
MbxxForm mbxxForm = (MbxxForm)form;
//RequestUtil.populateParamterValues(request,mbxxForm);
Mbxx mbxx = null;
Mbxxxm mbxxxm = null;
List mbxxxms= new AutoArrayList(Mbxxxm.class);
if(mbxxForm.getId() == null || "".equals(mbxxForm.getId())){
mbxx = new Mbxx();
}else{
mbxx = (Mbxx)mbxxService.get(Mbxx.class,mbxxForm.getId());
for(int i=0;i<mbxxForm.getXms().size();i++){
mbxxxm = (Mbxxxm)mbxxForm.getXms().get(i);

if(mbxxxm.getId()==""){

mbxxxm.setV_xmmb(mbxx.getId());
}else{
mbxxxms.set(i, mbxxxm);
}
}
mbxx.setXms(mbxxxms);

}
RequestUtil.bindEntity(mbxxForm, mbxx);
try {
if("".equals(mbxx.getId())){
mbxx.setId(null);
}
if("".equals(mbxx.getId())){
mbxxxm.setId(null);
}
this.mbxxService.save(mbxx);
RequestUtil.bindForm(mbxxForm, mbxx);
mbxxForm.setXms(mbxxxms);
} catch (Exception e) {
//TODO
}
return mapping.findForward("success");
}

action中的save就是上面提到的save方法,想实现的是最开始进入页面的时候先保存模板信息,然后刷新页面,会弹出模板项目的填写框,填写完模板项目后再点保存,执行模板信息的更新和模板项目的保存。
但现在出现的问题是:我在后台debug记录中看到在执行模板信息的保存时,是先select了mbxx的id,然后再执行两条update,分别update了mbxx和mbxxxm表,为什么不是update模板表、insert模板项目表呢?现在这样执行模板项目表中根本没有记录
...全文
143 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

81,095

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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