关于HIBERNAT的问题

shangezi 2009-09-08 10:50:10
我有个问题是这样的,我有个Agent的表,里面有这个Agent的可用金额,我是想每次付款的时候,执行一下判断操作,判断这个Agent表里面的可以金额的钱是否够钱付,我不知道是不是hibernate的什么机制,例如这样,我每次都先从数据库先查一遍这个Agent表里面的数据,例如现在要付100块,我先这样

Agent paymentAgent = agentDAO.getAgentById(userAgent.getId());

然后判断这个 paymentAgent.getAllowBalance()//可用金额 是否够钱,就是大于100

奇怪的问题就来了,可能我差出来的 paymentAgent.getAllowBalance() 是够钱的,例如里面有200,但不知道可能其他情况把钱付走了,例如从其他途径付了101块,这样就不够付这100块,但不知道是不是HIBERNATE的什么缓存机制或者什么,明明不够钱了,还能付款,导致最后数据库变成负数了,因为这时候是 200-101 = 99 的,然后用 99 去付款 100 就是变成 -1 了,不知道为什么,希望大家帮个忙
...全文
101 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
bdceo 2009-09-08
  • 打赏
  • 举报
回复
Agent我想这个信息应该保存在session中吧?
卡上余额也是啊,应该是Agent的一个属性字段吧?
这样的话,你每次购买了东西修改数据库的同时重新查询余额并放到session中,
然后要是购买之前就从session中判断余额是否足够就ok了吧?
余额应该是Agent的一个属性,我想把Agent放到session里保存就OK了吧?
暂且想这么多,具体的,我想看设计思路了...
doer_ljy 2009-09-08
  • 打赏
  • 举报
回复
大哥们,是异步问题吗?
是HIBERNATE把数据库的数据缓冲到了内存引起的吧!
关注中
meander 2009-09-08
  • 打赏
  • 举报
回复
帮顶
Lena-Yang 2009-09-08
  • 打赏
  • 举报
回复
同步问题
paizxin 2009-09-08
  • 打赏
  • 举报
回复
是不是考虑可以将此同步?
yukang_ky 2009-09-08
  • 打赏
  • 举报
回复
关注中
shangezi 2009-09-08
  • 打赏
  • 举报
回复
怎么都没人回答了
VistaKobe 2009-09-08
  • 打赏
  • 举报
回复
请把这个操作的代码贴完整一点。
代码间的舞者 2009-09-08
  • 打赏
  • 举报
回复
要加锁才行
this.getHibernateTemplate().update(entity, lockMode);
shangezi 2009-09-08
  • 打赏
  • 举报
回复
不知道是什么原因啊,郁闷
APOLLO_TS 2009-09-08
  • 打赏
  • 举报
回复
锁获得
事务开启
执行操作//最好采用非生命周期对象
事务关闭
锁释放

shangezi 2009-09-08
  • 打赏
  • 举报
回复
例如 Agent fromAgent = agentDAO.getAgentById(userAgent.getId());

这样 fromAgent 应该是从数据库读出来的了,所以我认为里面的所有字段的值都应该是跟数据库一样的,然后我就执行一下付款扣款的操作
fromAgent.setAllowBalance(fromAgent.getAllowBalance().subtract(paymentPrice));

就是AllowBalance 这个值,我是从自己本身减出去,就是AllowBalance = AllowBalance - paymentPrice 的意思,paymentPrice 就是要付的钱 ,但问题就出在这里,有时候 AllowBalance 竟然之前就会变了,所以不够paymentPrice 这个值大了,所以 AllowBalance = AllowBalance - paymentPrice 的话,最后变成负数了,但我在进来操作这步的时候,就是得到 fromAgent 的时候,我是判断过 AllowBalance 是已经大于 paymentPrice
shangezi 2009-09-08
  • 打赏
  • 举报
回复
上面有几位兄弟提到同步问题,那有什么解决方案,或者给我个例子吗
shangezi 2009-09-08
  • 打赏
  • 举报
回复
我对HIBERNATE的也不熟,但我觉得的是,竟然我每次都重新从数据库查一遍了,为什么还会不正确,我感觉放到session中还容易出问题

81,092

社区成员

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

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