Hibernate数据一致性

时间:2012-06-10 09:14:13

标签: java hibernate servlets consistency

我有java-servlet应用程序+ hibernate +流服务器

流量:

  1. 用户登录开始视频流
  2. 每2秒减少数据库中的分钟数
  3. 如果分钟< 0发送新分钟请求(响应可能在之后 很长一段时间,如果是这样继续下降)
  4. 问题:

    出现数据一致性问题,换句话说是递减分钟, 例如:user.setMinutes(user.getMinutes() - 2)可能看不到新分钟响应所做的更改,而且分钟也会损坏

    我认为sollution可以创建新的hibernate事务并在每次更改分钟时提交它,但这不起作用:

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

    问题:

    如何在每次更改获取最新数据时解决此问题?

1 个答案:

答案 0 :(得分:1)

Hibernate会话将您的实体缓存在内存中(在您的情况下是User实体)。仅创建用于更改剩余分钟数的新事务是不够的,还必须重新加载其他任务所做的更改(附加分钟请求)。您可以致电refresh()

来实现这一目标
session.refresh(user);
user.setMinutes(user.getMinutes() - 2);
session.flush();