Hibernate配置文件参数解释

1,entity生命周期、状态、session的联系
对象的状态分为临时状态、持久化状态
临时状态:new出来的对象,常见的普通对象
持久化状态:持久的实例在数据库中有对应的记录,并拥有一个持久化标识
游离状态:与持久对象关联的 Session 被关闭后,对象就变为脱管对象。对脱管对象的引用依然有效,对象可继续被修改。



对象状态与session的关系:
1,临时状态与session已经没有关系了,是一个不存在数据库的状态
2,save、saveOrUpdate、merge、lock都 可以获得一个持久化状态的对象, 但是并不意味着一定会存在与数据库中。在合适的情况下会保存在数据库中。
3,同样的,delete也不一定会导致对象从数据库中脱离。
4,session的 save、saveOrUpdate、merge的作用是将对象保存到session中,这时,session中会保存这个对象,但是这个时候不意味着已经把数据的变化传到数据库中。session就是一种缓存机制,如果需要将数据的改变传到数据库中,那就需要将session中的数据传输到数据库。
5,
同步时顺序:
①所有对实体的insert操作
②对实体的update操作
③对集合的删除操作
④对集合的删除、更新、插入的SQL语句
⑤对所有集合的insert操作
⑥对实体的delete操作

 
 
 

首先看下配置文件:
配置文件中使用的是HibernateTransactionManager来管理事务。
①对于insert、update、delete、save四个开头的函数,我们配置为propagation="REQUIRED"。意思是对于以这四个开头的,需要开启事务。
②对于get、find、selete、load四个开头的函数,我们配置为propagation="SUPPORTS" read-only="true",意思是说如果有事务,我们就支持事务,没有就不使用事务,而且是“只读”的。
这里只读的是有一个历史问题,在早期如果置 read-only="true",那么 HibernateTransactionManager会 session.setFlushMode( FlushMode.NEVER );但是现在会使用session.setFlushMode(FlushMode.MANUAL);也就是说,如果使用了 read-only="true",依然可以通过手动flush,完成对数据库的修改。
③对于其他开头方法使用默认方式,默认方式的配置是 propagation="SUPPORTS" read-only="false"。
④这三种开头的都可以将 insert、update、delete、save操作同步到数据库。
对于get、find、selete、load四个开头的函数
        对于save、saveOrUpdate、delete操作,如果不手动flush,不会将修改同步到数据库中,如果flush会立即对数据库造成修改。
对于 insert、update、delete、save开头的函数
        对于save、saveOrUpdate、delete操作,不需要手动flush,在函数即将结束时,会将修改同步到数据库中。
        如果手动flush,也不会立即对数据库造成修改。
对于默认
         对于save、saveOrUpdate、delete操作,不需要手动flush,在函数即将结束时,会将修改同步到数据库中。
        手动flush,会立即将修改同步到数据库中。
原因如下:
flush、 read-only 问题,
如果 read-only="true",需要手动flush,否则,由于没有手动flush,数据的修改将不会同步到数据库中。
如果 read-only="false",那么不需要手动flush,就可以将数据的修改同步到数据库中。 read-only="false",相当于 FlushMode.AUTO。
flush是指将session中缓存的修改操作同步到数据库的缓存中,并不是同步到数据库中,并不是对数据库立即造成实质修改。
propagation
如果 propagation="REQUIRED",会自动开启事务,它会保证修改的事务性。
如果 propagation="SUPPORTS",有事务就会使用事务,否则就不适用事务。
如果处于事务中,手动flush就会将修改同步到数据库的缓存中,但是不会将修改同步到数据库中。因为,为保证事务性,在所有操作没有全部提交到数据库时,并不会立即将操作执行。如果现在就开始修改,如果不锁全库,就可能破坏事务性,如果锁全库,那代价高的可怕(这一句是自己理解的,暂没有查证)。
如果不处于事务中, 手动flush就会将修改同步到数据库的缓存中,而且会立即修改到数据库中。


 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值