15
@Entity
public class Person {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
private int salary;
@Version
private long version;
// ...getters and setters
}
- 是否需要爲
version
創建setter/getter? - 當用Hibernate持久化這個實體時,我不需要手動設置這個值,對嗎?
- 爲了在Spring的
hibernateTemplate.saveOrUpdate
中使用樂觀併發檢查,還需要配置什麼?是否支持所有數據庫? - 如何對此實體進行單元測試?在我的數據庫中,顯示版本字段的所有記錄的值均爲0
- 每次都會調用
hibernateTemplate.saveOrUpdate
是否增加版本值?
@KLE只是爲了防止2個用戶調用hibernatetemplate.saveorupdate同一時間,當調用hibernatetemplate.saveorupdate時不需要額外的檢查嗎?任何異常都會拋出? – cometta 2009-12-03 09:51:05
@cometta重點不在於保存與否,而在於數據來自何處。在一個事務中,**如果你從數據庫**讀取一個實體,它的版本信息是最新的。當您保存它時,它會自動處理。如果您有一天會從其他來源獲取數據(例如表單的帖子),然後重新創建該實體,那麼您必須親自關注該版本。 – KLE 2009-12-03 10:01:10
一個很好的解釋是在這裏:http://en.wikibooks.org/wiki/Java_Persistence/Locking – Zilvinas 2014-01-29 12:44:58