【问题标题】:Updating object doesn't work properly in Hibernate 3更新对象在 Hibernate 3 中无法正常工作
【发布时间】:2013-11-23 10:33:52
【问题描述】:

Pojo 对象:

public class Test {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="id")
    private Integer id;

    private String name;
    @Column(columnDefinition="int default 100")
    private int number; 
    .....getter and setter........
}

后端操作:

@ResponseBody
@RequestMapping(value= "/common/index3")
public String index3(){

    Session session = sessionFactory.getCurrentSession();

    Test t = session.get(Test.class, 1);

    t.setNumber(t.getNumber() - 1);

    System.out.println("invoked");

    session.update(t);

    return "success";
}

网页 ajax 触发器

$(document).ready(function(){
    for(var i = 0; i < 3; i ++){
        $.post("/common/index3");
    }
}

问题

从客户端我向后端操作发送了 3 次请求,并且该操作也被正确调用了 3 次,但是,在数据库中,“数字”列仅被扣除 1 次,调用 3 次后,列值变为100到99,不知道为什么只扣了1次,预期值应该是97,我尝试flush & clear session以避免hibernate3缓存问题,有人知道怎么解决吗?

谢谢。

【问题讨论】:

    标签: insert-update hibernate3


    【解决方案1】:

    据我所知,您的事务没有提交到数据库。您应该在与数据库通信时使用事务。

    开始你的会话后,开始交易

    Transaction tx = session.beginTransaction()
    

    完成查询后,使用tx.commit() 将它们提交到数据库。

    【讨论】:

    • 我想我找到了问题,正如你所说,问题发生在前一个事务尚未提交时,所以如果有更多请求来,那些请求可能被取消,我尝试添加一个OPTIMISTIC 储物柜,它确实抛出了事务尚未完成之类的异常......,现在为了解决这个问题,我使用 ajax 一次性将所有数字发送到后端,然后在那里处理,到目前为止没有问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 2023-04-07
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多