hibernate 一级缓存
/**
*若电话号码中已经有这个号码,那么将它的扩展码自动增加1,以保证每次发送的电话号码加扩展码组成唯一号码;
*
**/
publicsynchronizedvoidupdateExtCode(StringphoneNumber)throwsException{
StringhqlFind="fromPhoneNumberwherephone_number="+phoneNumber;
PhoneNumberphNOFind=(PhoneNumber)
Udf.dbOperator.findUniqueResult(hqlFind);
//@Udf.dbOperator.getSessionFactory().getCurrentSession().clear();//清除一级缓存中的phNOFind
intextCode=phNOFind.getExtended_code()+1;
StringhqlUpdate="updatePhoneNumbersetextended_code="+extCode
+"wherephone_number="+phoneNumber;
Udf.dbOperator.update(hqlUpdate);
Udf.dbOperator.getSessionFactory().getCurrentSession().clear();
PhoneNumberphNOFindSecond=(PhoneNumber)Udf.dbOperator.findUniqueResult(hqlFind);
intextCodeUpdated=phNOFindSecond.getExtended_code();
}
项目中一段逻辑是1、通过“手机号”字段找到“手机号码对象”,得到“手机号码对象”的“扩展码”字段;2、将“扩展码”字段自增1,更新数据库;3、取得这个数据库的更新后的扩展码。
经过测试,得到的数据为更新前的扩展码数字。
经查资料,等发现时数据脏读问题。特地复习了一级缓存,将一级缓存中的数据清除后,问题解决。解决方法为在@加一行代码以清除一级缓存的对象。