hibernate中sql执行时机

ShopCartDto shopCartDto = shopCartDao.findTest(id);
shopCartDto.setQuantity(shopCartDto.getQuantity()+1);
System.out.println("qqqqqqqqq  " + shopCartDao.findByHqlTest(id).getQuantity());
shopCartDto.setQuantity(shopCartDto.getQuantity()+1);

打印的结构是+1后的值

打印的sql 执行了两次update

1.正常情况下, 查询到的实体对象修改后, 在事物提交时执行一次sql

2.如果实体修改后, 有相应的sql查询, 在sql查询前就会执行sql, 相当于后续的查询前执行一次flush操作

3.抛开当前示例,

a.当hibernate 执行save(),get()时是立即执行,生成sql语句,当执行update(),delete()时,会在事物提交的时候才执行。
b. oid(Object id)就是一个属性,只不过这个属性映射到表中,对应的是主键列!
c. sql语句执行时机,默认情况下是:
从没有oid到有oid,就会立即执行
从有oid到有oid,就会在事务提交时才执行.
d. 无论oid是从有到有,还是无到有,只要执行了s.flush();统统都会立即执行sql语句

猜你喜欢

转载自blog.csdn.net/asdfsadfasdfsa/article/details/83651106
今日推荐