当我们保存答案时,hibernate异常行被更新或删除异常 [英] hibernate exception row was updated or deleted exception when we save answer
问题描述
例外:
在这里我提供了引发异常的hibernate项目代码。 org.hibernate.StaleObjectStateException:行被另一个事务更新或删除(或未保存的值映射不正确):
当我们调用下面提到的方法
i时,希望使这个线程安全
pre $ public String saveAnswer(String assignmentid,String answerid,String answer)throws Exception {
$ b $ getStudentManager()。logRequestedAnswer(answerid,answer);
User user = getUserManager()。getCurrentUser();
HttpSession session = WebContextFactory.get()。getSession();
int practiceElapsedTime = getStudentManager()。touchPracticeTime(assignmentid,session);
long practiceUpdateTime =((Date)session.getAttribute(student_current_practice_last_update))。getTime();
StudentAnswer savedAnswer = getStudentManager()。saveAnswer(user,assignmentid,answerid,answer);
地图< String,Object> result = new HashMap< String,Object>();
result.put(answerid,savedAnswer.getAnswerKey()。getObjectid());
result.put(answer,savedAnswer.getAnswer());
//我们将客户端的时间与服务器同步,节省
result.put(practiceElapsedTime,practiceElapsedTime);
result.put(practiceUpdateTime,practiceUpdateTime); $()
$ b if(savedAnswer.getAssignmentStatus()。isCompleted())
result.put(progress,savedAnswer.getAssignmentStatus()。getPercent());
else
result.put(progress,savedAnswer.getAssignmentStatus()。getProgress());
StringWriter json = new StringWriter();
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(json,result);
返回json.toString();
我用hibernate学了两件事。
首先,如果您多次快速保存同一对象,则可能会出现StaleObjectStateException。这是由于桌面上的版本控制。一个简单的解决方案是禁用它。
如果你的表被多个线程访问,你也应该考虑锁定: http://docs.jboss.org/hibernate/orm/4.0/devguide/en-US/html/ch05.html
Here I am Providing the hibernate project code which throws the exception
Exception:
org.hibernate.StaleObjectStateException:Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect):
When we called the method mentioned below i want to make this thread safe
public String saveAnswer(String assignmentid, String answerid, String answer) throws Exception {
getStudentManager().logRequestedAnswer(answerid, answer);
User user = getUserManager().getCurrentUser();
HttpSession session = WebContextFactory.get().getSession();
int practiceElapsedTime = getStudentManager().touchPracticeTime(assignmentid, session);
long practiceUpdateTime = ((Date) session.getAttribute("student_current_practice_last_update")).getTime();
StudentAnswer savedAnswer = getStudentManager().saveAnswer(user, assignmentid, answerid, answer);
Map<String, Object> result = new HashMap<String, Object>();
result.put("answerid", savedAnswer.getAnswerKey().getObjectid());
result.put("answer", savedAnswer.getAnswer());
//we're synching the client's time with the server on saves
result.put("practiceElapsedTime", practiceElapsedTime);
result.put("practiceUpdateTime", practiceUpdateTime);
if (savedAnswer.getAssignmentStatus().isCompleted())
result.put("progress", savedAnswer.getAssignmentStatus().getPercent());
else
result.put("progress", savedAnswer.getAssignmentStatus().getProgress());
StringWriter json = new StringWriter();
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(json, result);
return json.toString();
}
There are two things i learned with hibernate. First, if you save the same object multiple times rapidly you may have a StaleObjectStateException. This is due to versioning on the table. A simple solution is to disable it. You should consider locking too if your table is accessed by multiple threads: http://docs.jboss.org/hibernate/orm/4.0/devguide/en-US/html/ch05.html
这篇关于当我们保存答案时,hibernate异常行被更新或删除异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!