¡¡¡¡ µ±ÎÒÃÇÓëÊý¾Ý¿â´ò½»µÀʱ£¬²¢·¢ÊǾ³£Òª½øÐд¦ÀíµÄ£¬Í¬Ê±¶ÔÒ»Ìõ¼Ç¼½øÐжÁÈ¡²¢¸üÐÂʱ£¬ËäÓÐÏȺó˳Ðò£¬µ«¾ÍÈçͬÎÒÃÇÉóºËÈÎÎñÒ»Ñù£¬¼¸¸öÈËÄõ½Í¬Ò»¸öÈÎÎñ£¬Í¬Ê±ÆÀ·Ö1·Ö2·Ö3·Ö£¬×îÖÕÕâ¸öÈÎÎñµÄ·ÖÊýÊÇÓÉ×îºóÌá½»µÄ¸ø¸üÐÂÁË¡£µ±¸üÐÂÍê±Ï£¬ÔÙ´ÎÄõ½´ò·Öʱ£¬»áУÑéÒѾ´ò¹ý·ÖÁË£¬²»ÔÊÐíÆÀ·Ö¡£ÎÊÌâ¾Í³öÏÖÔÚͬʱ¸üÐÂʱ¡£
Êý¾Ý¿âÊÂÎñµÄ¸ôÀë¼¶±ðÓÐ4¸ö£¬Óɵ͵½¸ßÒÀ´ÎΪRead uncommitted¡¢Read committed¡¢Repeatable read¡¢Serializable£¬ÕâËĸö¼¶±ð¿ÉÒÔÖð¸ö½â¾öÔà¶Á¡¢²»¿ÉÖØ¸´¶Á¡¢»Ã¶ÁÕ⼸ÀàÎÊÌâ¡£
Read uncommitted£º¶ÁδÌá½»µÄÊý¾Ý
Read committed£º ¶ÁÌá½»
Repeatable read£º²»¿ÉÖØ¸´¶Á
Serializable£º ÐòÁл¯
´ó¶àÊý¾Ý¿âʹÓÃRead committed£¬ÕâÊÇÐÔÄܺͰ²È«µÄ½áºÏµã£¬²¢Ê¹ÓüÓËøµÄ·½Ê½À´½â¾ö°²È«ÎÊÌâ¡£
½â¾ö´ËÀàÎÊÌâÓб¯¹ÛËøºÍÀÖ¹ÛËøÁ½ÖÖ·½Ê½£¬
±¯¹ÛËø£ºA²éѯ³öÕâÌõÈÎÎñʱ¾Í»áÄõ½Ò»°ÑËø£¬Õâ°ÑËøÊǸüÐÂËø£¬ÆäËûÈËÒÀÈ»¿ÉÒÔ²é³öÕâÌõÈÎÎñ£¬µ«ÊÇÔÚA¸üÐÂ֮ǰµÄ¹ý³ÌÖУ¬ºó²éѯ³öÈÎÎñµÄBCDµÈ²»¿ÉÒÔ½øÐиüУ¬¸üоͻᱨ´í¡£
ÀÖ¹ÛËø£ºA²éѯ³öÕâÌõÈÎÎñʱ£¬Äõ½ÕâÌõÈÎÎñµÄÒ»¸ö°æ±¾ºÅversion£¬Ã»¸üÐÂÒ»´Îversion++£¬µ±A½øÐиüÐÂʱ£¬Ò»µ©·¢ÏÖÊý¾Ý¿â°æ±¾ºÍ×Ô¼ºÄõ½µÄ°æ±¾²»¶Ô£¬¾Í±¨´í£¬·ñÔòÕý³£¸üС£
Àý×Ó£º
±¯¹ÛËø£ºLockMode.UPGRADEʵÏÖ¼ÓËø
Task a = (Task)session.load(Task.class, 1, LockMode.UPGRADE);
ÀÖ¹ÛËø£ºÔÚÐèÒª¼ÓËøµÄÀàÀï¼ÓÒ»¸översion×ֶΣ¬×¢½â@Version
private int version;
@Version
public int getVersion() {
return version;
}
public void setVersion(int version) {
this.version = version;
}
³£ÓõÄÊÇÀÖ¹ÛËø£¬±¯¹ÛËøÐ§ÂÊÌ«µÍ£¬Ò»µ©ÓÐÈËÄõ½ÈÎÎñ²»½øÐиüУ¬ÄǾÍÒâζ×ÅËùÓÐÈ˶¼»áÊÜÓ°Ïì¡£