Hibernate知识:
1、flush作用
Session.flush用于清理临时缓存,发出sql语句,但不提交事务
2、uuid主键生成策略,加入session管理就会出现id,
此时如果调用session.evict会清空持久化上下文,persitentcontext,
当事务提交时对比镜像查看临时缓存中是否有数据,如果有那么发出sql语句清空临时缓存,
更改persitentcontext中isexistdata为true,但是此时变量已经不存在会报线程安全异常,
事务回滚。解决办法当调用evict时先session.flush
3、natived主键生成策略,加入session管理发sql语句,不会有问题
4、assigned主键生成策略,如果是session.save(animal),
然后session.update(animal)最后session.save(user),但是发出的语句是先insert两条语句,
然后才更新。如果要做到按照顺序发出sql语句,可以先flush下。
http://aixiangct.blog.163.com/blog/static/9152246120113652732924/事务和session