Hibernate一对多关联映射时,出现failed to lazily initialize a collection of role: XXXXXX, no session or session was closed异常的解决方案:
一、配置一对多映射关联
<set name="quAn" order-by="AN_CODE asc" lazy="true">
<key column="AN_QU_ID" />
<one-to-many class="com.study.entity.StudyExamQuAn"/>
</set>
注:1.order-by 后面的是字段名称而不是属性名称;
2.key 的column为字段名称;
3.lazy设置为true时为懒加载。
二、配置过滤器来解决出现 no session or session was closed 异常问题
解决方法: 在项目的web.xml文件中加入如下代码:
<!--Spring解决加载延迟数据时hibernate session关闭问题, Spring将hibernate session绑定到每个请求线程,这样Spring的事物管理器就可以监听到-->
<filter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
<init-param>
<param-name>singleSession</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>/v/*</url-pattern>
</filter-mapping>
注:会出现org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER) - turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition异常,要配置事务处理,否则会导致session处于只读状态而不能做修改、删除的动作 。
三. 配置Spring事务管理,以下采用拦截器的方式配置事务
在applicationContext.xml文件中加入如下代码:
<!-- 定义事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 用拦截器方式 处理事务 -->
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager" />
<!-- 配置事务属性 -->
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>*Dao</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
注: <value>*Dao</value>为需要进行事务处理的bean名称,可以使用模糊匹配
分享到:
相关推荐
Struts负责视图与控制器部分,Spring负责业务逻辑层及依赖注入,Hibernate负责数据持久层。下面将详细介绍文档提及的各个知识点。 **Struts框架** Struts是基于MVC设计模式的一个Web层框架。它将Web层分为Model...
2. 灵活使用单向一对多关联 3. 不用一对一,用多对一取代 4. 配置对象缓存,不使用集合缓存 5. 一对多集合使用Bag,多对多集合使用Set 6. 继承类使用显式多态 7. 表字段要少,表关联不要怕多,有二级缓存撑腰 ...
通过@ManyToOne注解,可以定义User类中的Role属性,表示用户与角色的一对多关系。然后,通过Hibernate的Session接口进行CRUD操作,结合Spring的事务管理,确保数据的一致性。 此外,Struts2的Action类将处理HTTP...
Hibernate支持多种关系映射,如一对一(OneToOne),一对多(OneToMany),多对一(ManyToOne),多对多(ManyToMany),通过注解或XML配置来声明这些关系。 在面试中,对于SSH的掌握不仅要求理解这些基本概念,还需要能够...
**Spring**框架则是一个全面的企业级应用开发框架,涵盖了依赖注入(DI)、面向切面编程(AOP)、数据访问、事务管理、Web MVC等多个领域。在与JSF集成时,Spring常用于提供业务逻辑和服务层支持。例如,通过Spring...
至于“省市区三级级联”实现,这通常涉及到多对多或者一对多的关系映射。在Hibernate中,我们可能需要定义两个实体类,比如Province、City和District,并在它们之间建立关联。在用户选择省时,根据省ID加载对应的市...
Struts、Spring和Hibernate是Java开发中非常经典的三大框架,它们各自在Web应用程序的不同层面上发挥作用,共同构建出高效、可维护的系统。Struts主要负责控制层,Spring提供了全面的依赖注入(DI)和面向切面编程...
1. 避免使用单向一对多关联,改为双向一对多。 2. 合理使用单向一对多关联。 3. 避免一对一关系,用多对一代替。 4. 配置对象缓存,避免使用集合缓存。 5. 一对多集合使用Bag,多对多集合使用Set。 6. 继承类使用...
在文件"onetoone"中,我们可以推测这可能涉及到一对一(One-to-One)的关系映射,这是Hibernate中的一个概念,用于表示两个实体之间一对一的关联。在数据库设计中,一个实体可能与另一个实体存在一对一的对应关系,...
对于初学者而言,这个项目提供了实战SSH集成的宝贵机会,可以从中学习到如何将这三大框架有效地整合,以及如何处理实际问题,如一对多关系的映射、事务的控制、权限的管理等。 总结来说,“Struts+Spring+Hibernate...
1.1 父子关系映射:在数据库中,表与表之间可能存在一对多、多对一或者一对一的关系。通过Hibernate的注解或XML配置,我们可以定义实体类之间的关联。Spring则可以协助管理这些关联对象,例如通过@Autowired注解自动...
1. 使用双向一对多关联,避免使用单向一对多。 2. 灵活运用单向一对多关联。 3. 不使用一对一关联,用多对一代替。 4. 配置对象缓存,避免使用集合缓存。 5. 一对多集合使用 Bag,多对多集合使用 Set。 6. 继承类...
- **使用双向一对多关联**:减少不必要的查询。 - **合理配置缓存策略**:根据实际情况选择合适的缓存策略。 - **使用 Set 和 Bag**:提高集合类型的性能。 - **继承策略**:使用显式多态减少数据库查询次数。 - **...
- **使用懒加载代理**:对于一对多或多对多的关系,Hibernate会在需要的时候动态创建代理对象。 - **OpenSessionInView模式**:这是一种解决懒加载异常的有效方案,通过确保Session在整个请求生命周期中保持打开状态...
这种系统需要处理复杂的关系,如一对一、一对多、多对多,以及业务规则的验证,这就需要SSH框架的良好集成来实现。 在实际开发中,理解这三个框架的基本原理和它们之间的协作机制至关重要。Struts作为前端控制器,...
在IT行业中,Spring、Hibernate和Struts是三个非常重要的...在提供的压缩包"demo"中,可能包含了实现这一功能的示例代码和配置文件,进一步学习和研究这些内容将有助于深化对Spring、Hibernate和Struts整合应用的理解。
Hibernate支持多种关联关系的映射,包括单向多对一、单向一对多和双向一对多等。配置这些关联关系时,要考虑程序效率和业务需求。 此外,Hibernate提供了两种主要的查询方式: 1. HQL(Hibernate Query Language)...
" Spring+Hibernate 使用 Ehcache 作为 Second-Level Cache" Spring 和 Hibernate 是 Java Web 应用程序开发中两个非常重要的技术栈。Spring 是一个轻量级的控制反转(IoC)容器,提供了一个框架来管理 Java 对象...
- **合理设计关联关系**:尽量使用双向一对多关联,避免单向一对多。 - **灵活使用关联类型**:适当采用多对一替代一对一。 - **配置缓存策略**:合理配置对象缓存,而非集合缓存。 - **集合类型选择**:一对多集合...