解决懒加载的问题
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());
}
}
}
分享到:
相关推荐
在Java的持久化框架Hibernate中,数据访问优化是至关重要的,而抓取策略(Fetch Strategy)和懒加载(Lazy Loading)则是实现这一目标的关键技术。本文将深入探讨这两个概念,并通过具体的案例进行分析。 首先,让...
在Java持久化框架Hibernate中,懒加载(Lazy Loading)是一种优化策略,用于提高应用程序的性能和效率。懒加载的基本思想是“按需加载”,即在实际需要数据时才进行数据库查询,而不是在对象初始化时一次性加载所有...
在Java的Web开发中,Spring框架与Hibernate的整合是常见的数据访问层实现方式。Spring提供了强大的依赖注入(DI)和AOP(面向切面编程...以上就是关于"集成spring的hibernate懒加载"问题的详细解析,希望对你有所帮助。
**标题:“Hibernate之数据加载方式”** 在Java的持久化框架中,Hibernate是一个非常重要的工具,它简化了...在开发过程中,应当充分考虑数据量、网络延迟等因素,合理设计数据模型和查询逻辑,以实现高效的数据管理。
15. **懒加载和立即加载**:理解何时使用懒加载(延迟加载)以提高性能,以及何时需要立即加载关联对象。 16. **更新和删除操作**:`update()`和`delete()`方法分别用于更新和删除数据库中的记录,但要注意事务的...
集合属性的延迟加载是延迟加载中最常见的应用场景之一。当一个实体拥有大量的关联对象时,如果在初始化实体时也同时初始化这些关联对象,将会导致性能瓶颈。因此,延迟加载提供了一种解决方案:只在真正需要时加载...
4. **加载策略**:Hibernate提供了多种加载策略,如懒加载(Lazy Loading)、Eager Loading和批处理加载等,来控制关联对象何时以及如何加载。懒加载默认情况下不会立即加载关联数据,而是等到真正需要时才去数据库...
总结起来,Hibernate中的一对多/多对一关联是通过主外键映射来实现的,通过注解和配置文件定义实体间的关联关系,利用懒加载或立即加载策略控制数据获取,同时要注意双向关联的维护和级联操作的设置,以确保数据的...
除了`load`方法默认不支持多态加载(因为其懒加载机制),其他的加载方式如`get`、HQL和Criteria均在一定程度上支持多态加载。但请注意,启用多态查询的关键在于数据库表结构与映射文件的一致性。只有当父类和子类在...
延迟加载是一种优化策略,它使得关联的对象在真正需要时才从数据库中加载,而不是在加载主对象时立即加载所有关联对象。这样可以避免不必要的数据检索,提高应用程序的运行效率。 **2. Hibernate中的延迟加载** 在...
在Hibernate中,懒加载是一种优化策略,它推迟对关联对象的加载,直到真正需要使用这些对象时才进行加载,而不是在加载主对象时一次性加载所有关联对象。这样可以提高程序的性能,因为减少了数据库的交互次数。 ...
懒加载(Lazy Loading)是一种按需加载策略,在程序设计中广泛应用于减少内存占用和提高系统性能。在Java开发中,尤其针对数据库操作频繁的应用场景,如Hibernate ORM框架等,通过延迟对象属性的加载时间,直到真正...
10. **Lazy Loading和Eager Loading**:懒加载和急加载是对象加载策略,决定了何时从数据库加载关联对象,以优化性能。 11. **Hibernate缓存机制**:包括一级缓存(Session级别的缓存)和二级缓存(SessionFactory...
6. **延迟加载和懒加载**:理解何时及如何使用这些特性来提高性能。 7. **实体生命周期**:了解Hibernate如何处理对象的创建、更新、删除等状态变化。 8. **性能调优**:包括批处理、连接池配置、查询优化等方面的...
Hibernate懒加载的常见问题之一是代理类初始化问题。如果在持久化上下文(Session)之外或事务结束之后尝试访问懒加载属性,就会引发`LazyInitializationException`异常。为了避免这种情况,需要在配置或代码中妥善...
**标题**: Hibernate懒加载(Lazy Loading) 在Java的持久化框架Hibernate中,懒加载(Lazy Loading)是一种重要的优化策略,它的核心思想是“延迟加载”或“按需加载”。默认情况下,当一个实体被加载时,并不会...
5. **性能优化**:在实际应用中,为提高性能,可以采用懒加载(Lazy Loading)减少不必要的数据获取,或者使用Eager Loading(急加载)预先加载关联数据。另外,缓存机制如第二级缓存能减少对数据库的直接访问,提高...
- 例如,假设有一个用户实体 User 和一个权限集合 Permissions,当尝试访问 User 对象中的 Permissions 集合时,如果 Permissions 尚未加载,则会触发懒加载机制。 ```java User user = session.createQuery(...
在Java世界中,Hibernate是一个非常流行的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者...同时,利用Hibernate的其他高级特性,如懒加载、缓存策略、查询语言HQL等,可以进一步提高开发效率和应用性能。
6. **懒加载(Lazy Loading)**:为了提高性能,Hibernate支持懒加载机制,即关联的对象在需要时才从数据库加载,而不是在加载主体对象时一起加载。 7. **缓存(Caching)**:Hibernate集成了二级缓存机制,可以...