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、取得这个数据库的更新后的扩展码。

经过测试,得到的数据为更新前的扩展码数字。

经查资料,等发现时数据脏读问题。特地复习了一级缓存,将一级缓存中的数据清除后,问题解决。解决方法为在@加一行代码以清除一级缓存的对象。

相关推荐