当我们保存答案时,hibernate异常行被更新或删除异常 [英] hibernate exception row was updated or deleted exception when we save answer

查看:189
本文介绍了当我们保存答案时,hibernate异常行被更新或删除异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



例外:

在这里我提供了引发异常的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆