關於高併發 悲觀鎖 樂觀鎖
1、考慮高併發,若不加鎖,操作同一條資料會出現後一次更改覆蓋前一次提交的資料,資料丟失;
2、加鎖分為樂觀鎖、悲觀鎖:
在hibernate情景下:
悲觀鎖的使用-----query.setLockMode("sysseq", LockMode.UPGRADE); // 加鎖
session.get(Resource.class, 564l,LockMode.UPGRADE);//加鎖-----前面提交的事務會失敗。
樂觀鎖的使用----類上添加註解@OptimisticLocking(type=OptimisticLockType.VERSION)
屬性(version)添加註解
@Version
@Column(name="version")
private Integer version;
原理每一次更新資料version會增1,根據version的值判斷是否過期----先提交的事務會成功,同一version下事務後提交失敗。