hibernate执行saveorupdate时出现问题

我的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模板项目表呢?现在这样执行模板项目表中根本没有记录
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值