Hibernate 事务 更新数据库不成功

chenwfeng 2015-10-15 02:30:43
我在操作数据库时,先锁定查询,然后判断记录是否存在,如果没有记录就直接写入,如果有记录则更新数据库里的字段。
程序在数据库没有记录情况下,直接写入很顺利的完成,可是在有记录的情况下,更新数据库字段过了很长时间也更新不了。肯请大家帮看看。
程序代码如下:
package ActionPackage; //生产货物入库 Action
import Mapping.Supplierinfo;
import Mapping.ProduceGoodsInfo;
import com.opensymphony.xwork2.ActionSupport;
import org.hibernate.HibernateException;
import org.hibernate.LockOptions;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;

public class Apgaction extends ActionSupport{
private ProduceGoodsInfo pgio;
private int selgys;

public ProduceGoodsInfo getPgio() {
return pgio;
}

public void setPgio(ProduceGoodsInfo pgio) {
this.pgio = pgio;
}

public int getSelgys() {
return selgys;
}

public void setSelgys(int selgys) {
this.selgys = selgys;
}
@Override
public String execute(){
Configuration cfg = new Configuration().configure();
ServiceRegistry registry = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();
SessionFactory sfy = cfg.buildSessionFactory(registry);
Session session=null;

try{
session=sfy.openSession();
session.beginTransaction();

Supplierinfo suio = new Supplierinfo();
ProduceGoodsInfo pgi = new ProduceGoodsInfo();

ProduceGoodsInfo pgic =(ProduceGoodsInfo)session.get(ProduceGoodsInfo.class,pgio.getGoodsNumber(),LockOptions.UPGRADE);

if(pgic==null){ //如果货单号不存在,则直接写入
suio.setSupplierID(selgys);
pgi.setGoodsNumber(pgio.getGoodsNumber());
pgi.setGoodsName(pgio.getGoodsName());
pgi.setGoodsValue(pgio.getGoodsValue());
pgi.setPosition(pgio.getPosition());
pgi.setFinishdate(pgio.getFinishdate());
pgi.setIndate(pgio.getIndate());
pgi.setSupfo(suio);
session.save(pgi);
}
if(pgic!=null){ //如果货单号存在,则更新库存
int y=pgic.getGoodsValue();
pgic.setGoodsValue(y+pgio.getGoodsValue());
session.update(pgic);
}

session.getTransaction().commit();
addActionMessage("保存成功");
}catch(HibernateException ex){
addActionMessage("保存失败\n"+ex.toString());
session.getTransaction().rollback();
}finally{
if (session != null){
if (session.isOpen()){
session.close();
}
}
}
return SUCCESS;
}
}
...全文
98 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
chenwfeng 2015-10-15
引用 2 楼 xiesq5112 的回复:
为什么要锁定查询? 锁定了 后面怎么能对它做操作?
这个是货物入库的程序。为了防止系统在运行时产生的更新丢失等问题,所以加锁了。
回复
心随自在飞 2015-10-15
为什么要锁定查询? 锁定了 后面怎么能对它做操作?
回复
lsongiu86 2015-10-15
有其他事务锁住数据了吧估计
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2015-10-15 02:30
社区公告
暂无公告