public class UpdateBussiness extends HibernateDaoSupport implements Iupdate {
public String NewBrda(String mzhm, Long brxz, String brxm, Integer brxb,
String csny, String hkdz, String jtdh, String bxhm,String czgh) {
//青年人网站提示: 开启一个独立的事务,需独立取得rowid并需将结果马上写回数据库.(手动管理)
Session session = getHibernateTemplate().getSessionFactory().openSession();
Transaction tran = session.beginTransaction();
Long ll_rowid;
GyIdentity iden = (GyIdentity)session.load(GyIdentity.class,"MS_BRDA",LockMode.UPGRADE);
ll_rowid = iden.getValue();
ll_rowid = ll_rowid + 1;
iden.setValue(ll_rowid);
try{
session.saveOrUpdate(iden);
tran.commit();
}catch(Exception ex){
tran.rollback();
log4j.error(mzhm+","+brxm+":"+errlist.getError_1());
return "-1";
}finally{
session.clear();
session.close();
}
//事务结束
MsYgpjId pjid = new MsYgpjId();
pjid.setPjlx(new Long(3));
pjid.setYgdm(czgh);
MsYgpj ygpj = (MsYgpj)getHibernateTemplate().get(MsYgpj.class,pjid);
if(ygpj==null){
log4j.error(mzhm+","+brxm+":"+errlist.getError_3());
//请一定注意以下语句,实现spring框架的自动事务管理时,对于根据需要返回结果,
//不进行事务提交时,一定要清空hibernate的缓存,
//如不然,webservice成功调用结束后,缓存内的数据仍会写回数据库。
getHibernateTemplate().clear();
return "-3";
}
getHibernateTemplate().update(ygpj);
MsBrda brda = new MsBrda();
brda.setBrid(ll_rowid);
brda.setBrxb(new Long(brxb));
brda.setBrxm(brxm);
brda.setBrxz(brxz);
brda.setBxhm(bxhm);
brda.setCsny(date1);
brda.setHkdz(hkdz);
brda.setJtdh(jtdh);
getHibernateTemplate().save(brda); //需进行自动事务管理
return mzhm_new;;
}
}
在applicationContext.xml中自动事务管理的配置,如下:
<bean id="UpdateBussiness" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="transactionManager"/>
<property name="target" ref="UpdateHib"/>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
责任编辑:小草