您的位置:首页 > 其它

JPA的FlushModeType与Hibernate的FlushMode

2013-04-14 22:11 162 查看
Hibernate session FlushMode有五种属性:

1、NEVEL:已经废弃了,被MANUAL取代了

2 MANUAL:

如果FlushMode是MANUAL或NEVEL,在操作过程中hibernate会将事务设置为readonly,所以在Spring与Hibernate集成后进行增加、删除或修改操作过程中会出现如下错误

org.springframework.dao.InvalidDataAccessApiUsageException: Write
operations are not allowed in read-only mode (FlushMode.NEVER) - turn
your Session into FlushMode.AUTO or remove 'readOnly' marker from
transaction definition;

解决办法:配置事务,spring会读取事务中的各种配置来覆盖hibernate的session中的FlushMode;

3 AUTO

设置成auto之后,当程序进行查询、提交事务或者调用session.flush()的时候,都会使缓存和数据库进行同步,也就是刷新数据库。

4 COMMIT

提交事务或者session.flush()时,刷新数据库;查询不刷新

5 ALWAYS:

每次进行查询、提交事务、session.flush()的时候都会刷数据库

ALWAYS和AUTO的区别:当hibernate缓存中的对象被改动之后,会被标记为脏数据(即与数据库不同步了)。当
session设置为FlushMode.AUTO时,hibernate在进行查询的时候会判断缓存中的数据是否为脏数据,是则刷数据库,不是则不刷,
而always是直接刷新,不进行任何判断。很显然auto比always要高效得多。

 

JPA的FlushModeType只有两种:

1、COMMIT:仅当提交事务时才能进行刷新

2、AUTO:(默认)在执行查询时进行刷新

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐