Hibernate修改即使没有手动提交事务,再次查询时数据是修改后的结果;但是新增时需要手动提交事务才能查询到

Hibernate修改后,没有手动提交事务,再次查询时数据是修改后的结果。

public void ceshi() {
  String requestPayId = "50c9e8e581a9449e80748d466f9a51af";
  try {
    System.err.println("要开始了啊");
    System.err.println("数据初始状态");
    String sql = "select audit_status from request_pay where request_pay_id = :request_pay_id";
    System.out.println(queryMapList(sql, MapUtils.createMap("request_pay_id", requestPayId)));
    System.err.println("执行update语句修改");
    String sqlUp = "update request_pay set audit_status=6 where request_pay_id=:request_pay_id";
    sqlOperater(sqlUp, MapUtils.createMap("request_pay_id", requestPayId));
    System.err.println("执行update语句修改,完成后查询该数据");
    System.out.println(queryMapList(sql, MapUtils.createMap("request_pay_id", requestPayId)));
    System.err.println("查询数据之后抛异常");
    throw new NullPointerException();
} catch (Exception e) {
    this.getDao().getSession().getTransaction().rollback();                          
    String sql = "select audit_status from request_pay where request_pay_id = :request_pay_id";
    System.err.println("有一个异常接收到之后数据回滚再执行查询");
    System.out.println(queryMapList(sql, MapUtils.createMap("request_pay_id", requestPayId)));
 }
}

执行结果:

要开始了啊
数据初始状态
3
执行update语句修改
执行update语句修改,完成后查询该数据
6
查询数据之后抛异常
有一个异常接收到之后数据回滚再执行查询
3

可以看出,执行update语句后并没有进行事务提交;
但是查询结果已经是Update之后的数据;
模拟事务回滚之后,查询结果变为Update之前的数据;

但是在使用 add save 的时候就需要

this.getDao().getSession().flush();//提交事务

才能查询得到

你可能感兴趣的:(Java插件)