`
IThead
  • 浏览: 429391 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

hibernate中主表和从表查询懒加载

阅读更多
解决懒加载的问题

Exception in thread "main" org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role

----主表

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.po.Sortp" table="sortp" >
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="assigned" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" length="40" not-null="true" />
        </property>
        <set name="productses" inverse="true" cascade="all" lazy="false">
            <key>
                <column name="sortid" not-null="true" />
            </key>
            <one-to-many class="com.po.Products" />
        </set>
    </class>
</hibernate-mapping>


---从表

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.po.Products" table="products" >
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="assigned" />
        </id>
        <many-to-one name="sortp" class="com.po.Sortp" fetch="select" cascade="all">
            <column name="sortid" not-null="true" />
        </many-to-one>
        <property name="name" type="java.lang.String">
            <column name="name" length="50" not-null="true" />
        </property>
        <property name="price" type="java.lang.Double">
            <column name="price" precision="22" scale="0" not-null="true" />
        </property>
        <property name="saleprice" type="java.lang.Double">
            <column name="saleprice" precision="22" scale="0" not-null="true" />
        </property>
        <property name="descript" type="java.lang.String">
            <column name="descript" length="65535" not-null="true" />
        </property>
        <property name="contents" type="java.lang.String">
            <column name="contents" length="65535" not-null="true" />
        </property>
        <property name="saledate" type="java.util.Date">
            <column name="saledate" length="10" not-null="true" />
        </property>
        <property name="salecount" type="java.lang.Integer">
            <column name="salecount" />
        </property>
        <property name="image" type="java.lang.String">
            <column name="image" length="50" />
        </property>
    </class>
</hibernate-mapping>


在主表映射中需要设置懒加载,默认是为true 的
<set name="productses" inverse="true" cascade="all" lazy="true">


还有一种方式就是用代码处理

public static void main(String[] args) {
   // TODO Auto-generated method stub
   SortpDAO dao = new SortpDAO();
   List<Sortp> list = dao.getAllSortp();
  
   for(Sortp s :list){
    if(!Hibernate.isInitialized(s.getProductses())){
     Hibernate.initialize(s.getProductses());
    }
   }
   dao.closeSession();
   for(Sortp s :list){
      System.out.println(s.getName());
      Set<Products> set =s.getProductses();
      Iterator<Products> it = set.iterator();
      while(it.hasNext()){
      System.out.println("-----------"+it.next().getDescript());
      }
   }
}


0
0
分享到:
评论
1 楼 lizhihui19871127 2012-05-08  
楼主:和你探讨一下
一、我觉得你的第一种方式,不好。为什么呢,因为是一对多的关系,如果lazy设置为false的话,加载主对象的时候,会把所有的依赖关系的对象全部读取出来。你想想,如果是数百万个实例对象,系统性能如何?考虑过没有?所以一般都是多对一的时候才设置layz为true。
二、代码处理的话,也不对,如果是懒加载,都没有加载对应的关联对象,你的Set<Products> set =s.getProductses();
还能获取到值?应该是空的吧。
我也是今天研究了一下,欢迎一起研讨一下,一起进步~
不敬之处,敬请谅解~

相关推荐

    hibernate抓取策略和懒加载案例

    在Java的持久化框架Hibernate中,数据访问优化是至关重要的,而抓取策略(Fetch Strategy)和懒加载(Lazy Loading)则是实现这一目标的关键技术。本文将深入探讨这两个概念,并通过具体的案例进行分析。 首先,让...

    hibernate懒加载策略.doc

    在Java持久化框架Hibernate中,懒加载(Lazy Loading)是一种优化策略,用于提高应用程序的性能和效率。懒加载的基本思想是“按需加载”,即在实际需要数据时才进行数据库查询,而不是在对象初始化时一次性加载所有...

    集成spring的hibernate懒加载

    在Java的Web开发中,Spring框架与Hibernate的整合是常见的数据访问层实现方式。Spring提供了强大的依赖注入(DI)和AOP(面向切面编程...以上就是关于"集成spring的hibernate懒加载"问题的详细解析,希望对你有所帮助。

    Hibernate之数据加载方式

    **标题:“Hibernate之数据加载方式”** 在Java的持久化框架中,Hibernate是一个非常重要的工具,它简化了...在开发过程中,应当充分考虑数据量、网络延迟等因素,合理设计数据模型和查询逻辑,以实现高效的数据管理。

    Hibernate基础和入门:新建表和插入表

    15. **懒加载和立即加载**:理解何时使用懒加载(延迟加载)以提高性能,以及何时需要立即加载关联对象。 16. **更新和删除操作**:`update()`和`delete()`方法分别用于更新和删除数据库中的记录,但要注意事务的...

    hibernate 延迟加载深入剖析

    集合属性的延迟加载是延迟加载中最常见的应用场景之一。当一个实体拥有大量的关联对象时,如果在初始化实体时也同时初始化这些关联对象,将会导致性能瓶颈。因此,延迟加载提供了一种解决方案:只在真正需要时加载...

    Hibernate 一对多、多对一、级联、加载、反转

    4. **加载策略**:Hibernate提供了多种加载策略,如懒加载(Lazy Loading)、Eager Loading和批处理加载等,来控制关联对象何时以及如何加载。懒加载默认情况下不会立即加载关联数据,而是等到真正需要时才去数据库...

    hibernate基于主外键的一对多/多对一关联

    总结起来,Hibernate中的一对多/多对一关联是通过主外键映射来实现的,通过注解和配置文件定义实体间的关联关系,利用懒加载或立即加载策略控制数据获取,同时要注意双向关联的维护和级联操作的设置,以确保数据的...

    Hibernate加载方式与多态加载分析

    除了`load`方法默认不支持多态加载(因为其懒加载机制),其他的加载方式如`get`、HQL和Criteria均在一定程度上支持多态加载。但请注意,启用多态查询的关键在于数据库表结构与映射文件的一致性。只有当父类和子类在...

    hibernate延迟加载解决

    延迟加载是一种优化策略,它使得关联的对象在真正需要时才从数据库中加载,而不是在加载主对象时立即加载所有关联对象。这样可以避免不必要的数据检索,提高应用程序的运行效率。 **2. Hibernate中的延迟加载** 在...

    Hibernate lazy加载FOR Connection

    在Hibernate中,懒加载是一种优化策略,它推迟对关联对象的加载,直到真正需要使用这些对象时才进行加载,而不是在加载主对象时一次性加载所有关联对象。这样可以提高程序的性能,因为减少了数据库的交互次数。 ...

    懒加载异常解决.docx

    懒加载(Lazy Loading)是一种按需加载策略,在程序设计中广泛应用于减少内存占用和提高系统性能。在Java开发中,尤其针对数据库操作频繁的应用场景,如Hibernate ORM框架等,通过延迟对象属性的加载时间,直到真正...

    hibernate中文参考文档pdf

    10. **Lazy Loading和Eager Loading**:懒加载和急加载是对象加载策略,决定了何时从数据库加载关联对象,以优化性能。 11. **Hibernate缓存机制**:包括一级缓存(Session级别的缓存)和二级缓存(SessionFactory...

    Hibernate 中文api 等学习资料

    6. **延迟加载和懒加载**:理解何时及如何使用这些特性来提高性能。 7. **实体生命周期**:了解Hibernate如何处理对象的创建、更新、删除等状态变化。 8. **性能调优**:包括批处理、连接池配置、查询优化等方面的...

    理解Hibernate中PO的代理类

    Hibernate懒加载的常见问题之一是代理类初始化问题。如果在持久化上下文(Session)之外或事务结束之后尝试访问懒加载属性,就会引发`LazyInitializationException`异常。为了避免这种情况,需要在配置或代码中妥善...

    Hibernate lazy延迟加载

    **标题**: Hibernate懒加载(Lazy Loading) 在Java的持久化框架Hibernate中,懒加载(Lazy Loading)是一种重要的优化策略,它的核心思想是“延迟加载”或“按需加载”。默认情况下,当一个实体被加载时,并不会...

    struts2+hibernate+spring多表操作示例

    5. **性能优化**:在实际应用中,为提高性能,可以采用懒加载(Lazy Loading)减少不必要的数据获取,或者使用Eager Loading(急加载)预先加载关联数据。另外,缓存机制如第二级缓存能减少对数据库的直接访问,提高...

    hibernate延迟加载技术详细解

    - 例如,假设有一个用户实体 User 和一个权限集合 Permissions,当尝试访问 User 对象中的 Permissions 集合时,如果 Permissions 尚未加载,则会触发懒加载机制。 ```java User user = session.createQuery(...

    Hibernate通过配置文件自动生成表

    在Java世界中,Hibernate是一个非常流行的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者...同时,利用Hibernate的其他高级特性,如懒加载、缓存策略、查询语言HQL等,可以进一步提高开发效率和应用性能。

    hibernate中文文档

    6. **懒加载(Lazy Loading)**:为了提高性能,Hibernate支持懒加载机制,即关联的对象在需要时才从数据库加载,而不是在加载主体对象时一起加载。 7. **缓存(Caching)**:Hibernate集成了二级缓存机制,可以...

Global site tag (gtag.js) - Google Analytics