我对休眠比较新,所以请温和。我遇到了长时间运行的方法(〜2分钟长)以及更改存储在数据库中的对象上状态字段值的问题。下面的伪代码应该有助于解释我的问题。导致竞争状态的长时间运行方法
public foo(thing) {
if (thing.getStatus() == "ready") {
thing.setStatus("finished");
doSomethingAndTakeALongTime();
} else {
// Thing already has a status of finished. Send the user back a message.
}
}
该伪代码不应该采取太多的解释。我想doSomethingAndTakeALongTime()运行,但只有当它具有“准备就绪”的状态。每当doSomethingAndTakeALongTime()花费2分钟完成时,我的问题就会出现,并且事物状态字段的更改在它离开foo()之前不会持久保存到数据库。因此,另一个用户可以在这2分钟内发出请求,if语句将评估为true。
我已经尝试更新字段并手动刷新会话,但它似乎没有工作。我不知道该从这里做什么,并希望得到任何帮助。
PS:我的hibernate会话是由spring管理的。
为了避免红鲱鱼:你知道你应该使用'equals()'来比较字符串吗? – BalusC 2010-05-26 22:06:25
您的方法是否在交易环境中,例如春季声明式交易?如果是这样,那么冲洗将无法帮助,因为其他用户不会看到更改。 – mdma 2010-05-26 22:09:48
@BalusC,是的,我知道这一点。我的真实代码不使用字符串;我刚刚创建了这个例子,并且不正确,为了您的观看乐趣。 :) – keeleyt83 2010-05-27 02:59:04