Spring+Hibernate(JPA)防止臟數(shù)據(jù)自動提交
Hibernate的臟檢查(dirty checking)。每次裝載一個對象到內存時,session始終跟蹤它的修改。于是每次對數(shù)據(jù)的查詢,session都將跌代所有的session中的對象并檢查臟數(shù)據(jù),將臟數(shù)據(jù)flush到數(shù)據(jù)庫。方法1:
將事務設置為只讀,然后手工flush。
@Transactional(rollbackFor = RuntimeException.class,readOnly=true)
public void save(TestEmployee entity) {
entitymanager.persist(entity);
entitymanager.flush();
}
方法2:
在一個session中讀取、查詢大量數(shù)據(jù)對象情況下的制勝武器- FlushMode.NEVER。當然要記住,在此過程中你不可以修改這些數(shù)據(jù),不然就真的把數(shù)據(jù)“搞臟”了。
使用武器秘訣如下:
FlushMode previous = session.getFlushMode();
session.flush(); // who know's what been done till now
session.setFlushMode(FlushMode.NEVER);
// Do some querying
// Do some more querying
// Really load up that session
// Execute a few more queries
// Write back to some tables
session.flush();
session.setFlushMode(previous);
posted on 2014-09-07 11:13 紫色心情 閱讀(3381) 評論(0) 編輯 收藏 所屬分類: JAVA