2012-06-10 42 views
0

我有java的servlet应用+冬眠+流式服务器休眠数据一致性

流速:

  1. 用户登录开始视频数据的基础流
  2. 减量abonament分钟每2秒
  3. 如果分钟<新分钟0的发送请求(响应可以是 长的时间后,如果是这样继续递减)

问题:

出现数据一致性的问题,换句话说而递减分钟, 例如:user.setMinutes(user.getMinutes() - 2)可能无法看到新分钟响应maded变化,和分钟会被破坏

我想sollution可以创建新的Hibernate事务和每个当我改变分钟时间提交,但这并没有工作:

Transaction t = session.beginTransaction(); 
user.setMinutes() 
session.flush(); 
t.commit(); 

问题:

如何解决这个问题,当每个变化得到最新的数据?

+1

您的问题是什么? – buc

+0

@buc - 增加它 – Sergey

回答

1

Hibernate的Session缓存的实体内存(你的情况User实体)。创建一个新的事务来改变剩余的分钟数是不够的,你还必须重新加载其他任务所做的改变(附加分钟请求)。您可以通过致电refresh()实现此目的:

session.refresh(user); 
user.setMinutes(user.getMinutes() - 2); 
session.flush(); 
+0

谢谢它的工作,我也发现这个方法 - 那么Session.lock(用户,LockMode.READ),你觉​​得是什么也许会有帮助,或session.refresh()将在关? – Sergey

+1

@Sergey:据我所知,'那么Session.lock()'不读取数据库变回实体,我会坚持使用'刷新()'是,如果作品。 – buc