Hibernate DML 操作记录
http://developer.51cto.com/art/200906/130045.htm
?
网上流传的很老的一段文字:

红框标记的文字使用hibernate 源码来解释:
hibernate-3.6.0.final/core/src/main/java/org/hibernate/loader/Loader.java
?
请查看代码Loader.java 1341行代码:
?
?
?
举个例:
账户对象:Account.java
?
session.createQuery("update Account a set a.balance=? where a.id = ?").setParameter(0, -100).setParameter(1, 1) .executeUpdate();??
?
在AccountService中同一个事务中执行如下操作:
?
?
场景1?(1) Account account = getAccountById(1);
//更新编号1的余额
(2) updateAccountBalance();
//再次查询
(3)account = getAccountById(1);
此时account对象的余额是没有改变的,因为结果来自session缓存?如果将Hibernate 中设置show_sql = true ,
(1)和(3)都会输入查询SQL,需注意是(3)虽然输出了SQL但数据并不是来自数据库。
?
?
?
场景2//更新编号1的余额
updateAccountBalance();
//再次查询?
Account account??= getAccountById(1);
此时account对象的余额是更新后的,因为结果来源数据库??
?
?