HibernateTemplate全解之get和load
来源:互联网 发布:海信网络电视怎么样 编辑:程序博客网 时间:2024/05/16 11:17
一、 get的用法
1 get(final Class entityClass, final Serializable id, final LockMode lockMode)
2 get(final String entityName, final Serializable id, final LockMode lockMode)
一般lockMode默认为空,也就是说LockMode这个参数不写
3 补充说明LockMode类:
该实例代表关系型数据库表中一条记录的锁定方式,Hibernate的加锁模式---包括
3.1 LockMode.NONE:无锁机制
3.2 LockMode.WRITE:Hibernate在Insert和Update记录的时候会自动获取 (注:不能在load的时候用,否则抛出异常)
3.3 LockMode.READ:直接从数据库中读数据,绕过了Hibernate的Cache
3.4 LockMode.UPGRADE:通过select * from ta for update方法,可以将查询结果中的记录进行update锁定,及不允许其他进行对这些记录进行修改,
3.5 LockMode.UPGRADE_NOWAIT:Oracle的特定实现,利用Oracle的for update nowait子句实现加锁 相对于upgrade 不想其他进行进入停顿状态,可以用nowait子句,直接返回操作异常信息,提示操作的记录处于锁定状态不能进行修改
二、load的用法
同get
三、get和load的区别
主要的地方:
getHibernateTemplate.load() 存在延迟加载问题。
getHibernateTemplate.get() 不存在此问题,她是不采用lazy机制的。
1 当记录不存在时候,get方法返回null,load方法产生异常,即get()可以取空的数据集,但load()不行。
take a look at the Hibernate documentation (though I agree is not very explicit)--the HibernateTemplate is basically a wrapper around the native Hibernate API.
get() will return null if an object is not found while load() will always return a non-null object which is a proxy. If the underlying object does not exist, the proxy will thrown ObjectNotFoundException.
load() should be used when you are sure that the object exits while get() when you're not.
2 load方法可以返回实体的代理类,get方法则返回真是的实体类
3 load方法可以充分利用hibernate的内部缓存和二级缓存中的现有数据,而get方法仅仅在内部缓存中
进行数据查找,如果没有发现数据則将越过二级缓存,直接调用SQL查询数据库。
4 也许别人把数据库中的数据修改了,load如果在缓存中找到了数据,则不会再访问数据库,而get则会
总之对于get和load的根本区别,一句话,hibernate对于load方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,如果在 使用过程中发现了问题,就抛异常;而对于get方法,hibernate一定要获取到真实的数据,否则返回null。
- HibernateTemplate全解之get和load
- hibernateTemplate load 和get 的区别
- HibernateTemplate全解之find
- Hibernate之get()和load()
- Hibernate之get()和load()
- HibernateTemplate全解
- HibernateTemplate全解
- HibernateTemplate全解
- Hibernate之get和load的区别
- Hibernate学习之get和load区别
- Hibernate之load和get的区别
- Hibernate之get和load的区别
- Hibernate5教程之三get和load
- get 和 load 区别
- get和load方式
- hibernate get()和load()
- hibernate get()和load()
- load()和get()
- 用gdb调试子进程
- sql 中的表连接
- Sqlite数据库中关键字误用做字段名的处理方法
- ubuntu12下配置JDK,No such file or directory错误
- iOS中如何避免图像解压缩的时间开销
- HibernateTemplate全解之get和load
- setRequestedOrientation()
- 企业综合管理系统BATE 2.0版下载地址
- 原来的delphi 控件何处寻?
- 抽象类与接口之间的异同
- Oracle执行计划详解
- C 学习笔记
- storm中,ack与fail信息的处理
- javaweb之Session完成用户登录