我在我的迭代用户的Grails一个石英工作,做一个每晚更新上每个用户。 但是,如果我得到一个用户对象的更新一个StaleObjectStateException,似乎每一次更新是获取相同StaleObjectStateException后。 事情是这样的:
def users = User.list()
users.each { user ->
try {
user.doUpdate()
user.save()
} catch (all) {
// I end up here for every user object after a StaleObjectStateException
}
}
我怎样才能恢复? 我不介意零星故障(最好我收集这些,并在年底重试),但现在这个从字面上停止所有剩余的更新。
理想情况下,你应该做的每一次更新/保存在一个新的事务,否则任何故障,将影响整个事务/ Hibernate的Session。 这会更有意义,因为每一次更新/保存应该是它自己的原子操作呢。
你也应该得到事务中每个域对象。
def userIds = User.withCriteria {
projections {
property("id")
}
}
userIds.each { userId ->
User.withTransaction {
try {
def user = User.get(userId)
user.doUpdate()
user.save()
} catch (all) {
// do whatever.
}
}
}
文章来源: StaleObjectStateException on one domain object in a list affects all remaining updates