hibernate的lazy怎么用?什么时候用,什么时候不用?
某次面试,考官问我hibernate中lazy是做什么的。我把延迟加载说了一下。比如用到的时候才会发出sql,没用是不会查询的,有助于性能。 结果他问我,“那你说的是lazy的优点。那为什么lazy可以设置成ture或false,如果lazy这么好,都设置成true好了,为什么还要有时设置为false?我的意思是,一般什么情况下我们不用lazy?” 就是这个问题,百思不得其解啊。
这个面试官问的还蛮深的,一般人确实只知道lazy是用来控制延迟加载和立即加载的,而没有去考虑为什么要这么用。 hibernate3.0中lazy有三个值,true,false,proxy,默认的是lazy="proxy". 具体设置成什么要看你的需求,并不是说哪个设置就是最好的。 假如在student对象中包含一个head对象 如果你确定在用student对象的时候就要用到head对象里的属性,那你就设置立即加载,因为设置立即加载那么在查询student的同时就会查询student的head,hibernate就会在查询的时候关联两张表从而生成的sql就可能只有一条。而如果你设置的是延迟加载,那么肯定会要生成1+N条sql语句:其中“1”是查询student的语句,“N”是根据N个student的id去查询head的N条语句。而且,延迟加载是要用到的时候才去执行查询,这样系统判断那里需要加载,那里不需要加载也需要时间,性能上肯定就不如立即加载了! 如果,你是有的地方需要用到student的时候才用到head属性,那么你就设置成延迟加载,因为查询2张表的数据肯定要比查询1张表的数据消耗大。 到低要怎样设置就要看你的实际需求了!
相关推荐
这就是Hibernate懒加载(Lazy Load)机制的作用所在。懒加载是一种延迟加载策略,只在真正需要时才加载关联的数据,以减少内存消耗和提高响应速度。 Gilead,全称为Hibernate for Flex,是用于Flex和Hibernate之间...
Hibernate的延迟加载(Lazy Loading)和懒加载机制(Lazy Initialization)是优化ORM框架性能的重要策略。这个机制的主要目的是提高程序的效率,减少不必要的数据库交互,只在真正需要数据时才去加载它们。以下是对...
**标题**: Hibernate懒加载(Lazy Loading) 在Java的持久化框架Hibernate中,懒加载(Lazy Loading)是一种重要的优化策略,它的核心思想是“延迟加载”或“按需加载”。默认情况下,当一个实体被加载时,并不会...
标题中的“Hibernate lazy加载FOR Connection”指的是Hibernate框架中的一种特性,即懒加载(Lazy Loading)。在Hibernate中,懒加载是一种优化策略,它推迟对关联对象的加载,直到真正需要使用这些对象时才进行加载...
标题中的"Dwr+Hibernate的Lazy问题"涉及到两个主要技术:Direct Web Remoting (DWR) 和 Hibernate。DWR 是一种让 JavaScript 在浏览器中直接调用服务器端 Java 方法的技术,而 Hibernate 是一个流行的Java持久化框架...
由于Java的反射机制和代理模式,Hibernate在某些情况下会遇到所谓的“初始化外键”问题,即在未初始化懒加载属性时,试图访问该属性,导致`LazyInitializationException`。这个问题通常发生在Session关闭之后,因为...
在Java的持久化框架Hibernate中,延迟加载(Lazy Loading)是一种优化策略,旨在提高应用程序的性能和效率。当一个实体的某个属性是一个关联的集合,如一对多的关系,Hibernate默认会采用延迟加载机制。这意味着在...
在Java的持久化框架Hibernate中,懒加载(Lazy Loading)是一种优化策略,它允许我们推迟对关联对象的加载,直到真正需要它们的时候。标题“hibernate在集合上的lazy策略”指的是Hibernate如何处理与实体相关的集合...
当我们设置Hibernate中的实体属性`lazy=true`时,这是懒加载(Lazy Loading)机制的体现。懒加载是一种优化策略,它允许我们在需要时才加载关联的对象,而不是在初始加载实体时就加载所有关联数据,从而提高性能。 ...
### Java面试题详解 #### 1.... Hibernate lazy机制是如何体现的? - **懒加载**:默认情况下,Hibernate会在真正需要时才加载关联对象的数据,这种机制可以提高查询效率,减少不必要的数据库交互。
2. **代理机制**:Hibernate使用CGLIB或Javassist动态生成代理类,使得在访问懒加载关联时,能在运行时插入额外的SQL查询。 3. **初始化问题**:懒加载在实体已经脱离Session时无法工作,因为Hibernate需要Session...
延迟加载(Lazy Loading)是Hibernate的一项重要特性,允许我们在真正需要时才加载关联对象,从而避免了“大数据量”的一次性加载。理解并合理运用懒加载,可以避免内存溢出。 10. **性能优化**: Hibernate 提供...
12. **延迟加载Lazy Loading**:Hibernate的懒加载机制可以推迟到真正需要时才加载关联的对象,有效避免了内存浪费。 13. **查询优化**:Hibernate提供了SQL生成器,可以根据不同的数据库生成最优的SQL语句,同时...
在 Hibernate 中,Lazy 机制可以减少数据库的查询次数,但是也会导致一些问题。解决这个问题的方法有两种:一种是在 web.xml 中使用 Spring 提供的 OpenSessionInViewFilter,另一种是在 application.xml 中配置 ...
8. **缓存机制**:Hibernate提供了一级缓存(Session级别的缓存)和二级缓存(SessionFactory级别的缓存),能有效提高性能。同时,还支持第三方缓存服务如Ehcache。 9. **实体生命周期**:Hibernate管理对象的生命...
8. **延迟加载(Lazy Loading)**:Hibernate支持懒加载机制,只有当真正需要访问关联对象时,才会发起数据库查询。 9. **集合映射**:Hibernate支持多种集合类型的映射,如List、Set、Map等,以及一对一、一对多、多...
-延迟加载(Lazy Loading):只在需要时加载关联对象,避免数据冗余。 8. **HQL和Criteria API**: HQL是面向对象的查询语言,类似于SQL但更接近Java。Criteria API则提供了一个程序化的查询方式,可以在运行时...
10. **缓存机制**:Hibernate提供了第一级缓存(Session级别的)和第二级缓存(SessionFactory级别的),可以提高数据访问速度,减少数据库压力。 11. **事务管理**:Hibernate支持JTA和JPA的事务管理,可以方便地...
6. **Caching**:Hibernate提供了一级缓存(Session级别的)和二级缓存(SessionFactory级别的)机制,提高数据读取效率。 7. **Mapping**:通过注解或者XML文件,Hibernate将Java对象与数据库表进行映射,使得...
`hibernate_query_cache`和`hibernate_cache_level_2`揭示了Hibernate的缓存机制。查询缓存可以存储查询结果,避免重复计算,提高效率;第二级缓存是进程级别的,可以跨会话共享数据,进一步提升性能。理解并适当地...