0

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

流动:

  1. 用户登录开始视频流
  2. 每 2 秒减少数据库中的 abonament 分钟数
  3. if minutes < 0 发送新分钟的请求(响应可能在很长一段时间后,如果是继续递减)

问题:

出现数据一致性问题,换句话说,在减少分钟数时,例如:user.setMinutes(user.getMinutes() - 2)可能看不到新分钟数响应所做的更改,分钟数将被破坏

我认为解决方案可以创建新的休眠事务并在每次更改分钟时提交它,但这没有用:

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

问题:

当每次更改获取最新数据时,如何解决这个问题?

4

1 回答 1

1

Hibernate 会话将您的实体缓存在内存中(在您的情况下为User实体)。为更改剩余分钟数创建新事务是不够的,您还必须重新加载其他任务所做的更改(额外分钟数请求)。您可以通过调用来实现这一点refresh()

session.refresh(user);
user.setMinutes(user.getMinutes() - 2);
session.flush();
于 2012-06-10T09:40:29.547 回答