hibernate 一级缓存

/**
* 若电话号码中已经有这个号码,那么将它的扩展码自动增加1, 以保证每次发送的电话号码加扩展码组成唯一号码;
*
* */
public synchronized void updateExtCode(String phoneNumber) throws Exception {
String hqlFind = "from PhoneNumber where phone_number = " + phoneNumber;
    PhoneNumber phNOFind = (PhoneNumber)   
   
        Udf.dbOperator.findUniqueResult(hqlFind);
   // @ Udf.dbOperator.getSessionFactory().getCurrentSession().clear(); //清除一级缓存中的phNOFind   
    int extCode = phNOFind.getExtended_code() + 1;
String hqlUpdate = "update PhoneNumber set extended_code = " + extCode
+ " where phone_number = " + phoneNumber;
Udf.dbOperator.update(hqlUpdate);
Udf.dbOperator.getSessionFactory().getCurrentSession().clear();
PhoneNumber phNOFindSecond = (PhoneNumber) Udf.dbOperator.findUniqueResult(hqlFind);
              int extCodeUpdated =  phNOFindSecond.getExtended_code();
}


     项目中一段逻辑是 1、通过“手机号”字段找到“手机号码对象”,得到“手机号码对象”的“扩展码”字段;2、将“扩展码”字段自增1,更新数据库;3、取得这个数据库的更新后的扩展码。
      经过测试,得到的数据为更新前的扩展码数字。
      经查资料,等发现时数据脏读问题。特地复习了一级缓存,将一级缓存中的数据清除后,问题解决。解决方法为在@加一行代码以清除一级缓存的对象。


      

猜你喜欢

转载自david01205.iteye.com/blog/1622575