關於hibernateTemplate和jdbcTemplate的是否共享事務的說明
阿新 • • 發佈:2019-01-07
1、hibernateTemplate 與 jdbcTemplate 事務為共享。
2、但hibernate中的HQL方法,比如save update等 ,若不呼叫flush(),則資料只存在於緩衝區,未提交到資料庫中,此時事務並未提交,
故共享事務中的 jdbctemplate無法查詢到該資料;呼叫flush後,資料也可以共享。舉例如下:
1、hibernateTemplate.save(obj)
2、jdbctemplate.queryforList(sql)
第二行中的select語句無法查詢到第一行語句中save的資料。
1、hibernateTemplate.save(obj);flush();
2、jdbctemplate.queryforList(sql)
第二行即可查詢到。事務共享:jdbctemplate hibernatetemplate 共享資料事務,即與資料庫同步,但hibernateTemplate有自身的快取設定,所以在不呼叫 flush的情況下,可能產生資料丟失。
但若hibernateTemplate中呼叫 find 或 其他方法後,自動呼叫flush同步資料。而呼叫jdbctemplate時不會重新整理hibernate的快取。
呼叫flush後,新增資料只會存在於當前事務中,其他事務訪問該表均無變化。