懒加载: FatchType.LAZY :在加载一个实体的时候,不会马上从数据库中加载,即从数据库中加载到内存。
急加载:FatceType.EAGER :在加载一个实体时,会立即从数据库中查询,与其关联的类也会被同时查询。
在我们使用@ManyToOne等时,都会被默认为急加载。
在hibernate中,我们无论是使用懒加载还是急加载,get方法都会一次加载所有基本数据类型属性的值,而load则不同。
在我们开启了懒加载之后,load方法只会加载id属性,所有的非id属性的访问操作都不会执行。只有id属性中有实际值(其实就是你调用load方法时传的那个),
在session没有关闭的之前,如果访问除id外的其他属性才会发sql语句去查询,我们经常犯的一个错误就是在当前session关闭以后访问由load()加载的对象的非id属性,
此时Hibernate尝试通过当前session发sql查询,但发现session已经关闭,这样就会发出no session的异常 。
一般我们将将FetchType.lazy 改成 EAGER ,就可以避免这个错误。
但是在我们需要查询一个表时,如果这个表有很多与其关联的表,如果使用急加载的话,在第一次加载就会很慢,如果是懒加载相对则会快一些。但是在我们又需要查询与此表相关的数据的时候
急加载就会很快,因为在第一次加载的时候,已经帮我们全部加载好了。而懒加载则会相对慢一些,因为在我门需要查询的时候,它才会帮我们去查。
所以让他们算是各有优缺点。
而我们用哪一种方法更好,则需要根据我们的具体情况去使用了
延迟加载也称为懒加载,是hibernate3关联关系对象默认的加载方式,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。简单理解为,只有在使用的时候,才会发出sql语句进行查询。
延迟加载的有效期是在session打开的情况下,当session关闭后,会报异常。当调用load方法加载对象时,返回代理对象,等到真正用到对象的内容时才发出sql语句。
(具体可以搜索一下hibernate的一些文档介绍)。
拦截器是动态拦截action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。例如:在你购买商品后,去购物车进行付款时,拦截器或者过滤器会起作用来验证是否已登录,若未登录则转向登陆界面。过滤器和拦截器的作用,我个人感觉差不多。
立即加载和拦截器的使用不存在必要的关系,拦截器有自己的作用,就看你想用不想用他了。
事务:首先应该理解这个词在sql里面是什么意思?
事务就是一组简单的逻辑单元,事务的四个特性:原子性、一致性、隔离性、持久性。
事务的分类:显示、隐式、自动提交。
事务的创建:开始事务:begin transcation、
提交事务:commit transaction、
回滚事务:rollback transaction。
希望能帮到您!
用户登录
还没有账号?立即注册
用户注册
投稿取消
文章分类: |
|
还能输入300字
上传中....