我正在做一个项目,使用Hibernate进行持久化,使用Struts 2进行视图模式。
我的配置文件是:
web.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
//......
//.....
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- The defintion of the root Spring Container shared by all Servlets and Filters -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- Creates the spring Container shared by all servlet and filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<filter> <!-- Get spring to keep the session open for the whole request, so hibernate's lazy loads work -->
<filter-name>openSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>openSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
< code > application context . XML :
<?xml version="1.0" encoding="UTF-8"?>
<beans >
//.......
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/DB_TEST"></property>
<property name="username" value="root"></property>
<property name="password" value=""></property>
</bean>
<bean id="persistenceUnitManager" class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
<property name="persistenceXmlLocations">
<list>
<value>classpath*:META-INF/persistence.xml</value>
</list>
</property>
<property name="defaultDataSource" ref="dataSource"></property>
</bean>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitManager" ref="persistenceUnitManager"></property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"></property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<context:annotation-config></context:annotation-config>
</beans>
我的问题是,在Struts 2的视图模式中,我无法保持Hibernate会话打开,这意味着当我尝试加载一些尚未用Hibernate初始化的数据(例如集合)时,我会得到<code>org.Hibernate。LazyInitializationException,所以在做了一些研究之后,我发现我必须在<code>web中添加这个范围。xml,以在视图模式中保持会话打开。
范围:
<filter> <!-- Get spring to keep the session open for the whole request, so hibernate's lazy loads work -->
<filter-name>openSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>openSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
但是即使这样我还是有同样的问题,所以谁能告诉我我哪里做错了。
我以前也遇到过类似的问题,为了解决这个问题,我使用了hibernate . enable _ lazy _ load _ no _ trans属性,而不是OpenSessionInView模式。关于LazyInitializationException的更多信息可以在这里或这里找到
滤波器链的顺序很重要。在您的情况下,会话应该在struts执行动作之前打开,之后关闭。最后一件事由spring通过管理Hibernate会话来完成。因此,重新排序过滤器,并允许struts2 dispatcher接受来自第一个过滤器的请求。
<filter> <!-- Get spring to keep the session open for the whole request, so hibernate's lazy loads work -->
<filter-name>openSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>openSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
我使用CXF Servlet公开了一些REST服务。然而,我遇到了这样的问题:一个类需要一个延迟加载的集合(不止一个列表)。我得到了这个: 我的cxf配置相当简单: 如何实现“在视图中打开会话”模式,以便在 Jackson 序列化对象时我的Hibernate会话可用?
问题内容: 考虑到我选择的JPA(Hibernate实现),Spring和<在此处插入MVC框架-Struts 1,Struts 2,Spring MVC,Stripes …>的开发框架,我要问这个问题。 我一直在思考我的实体层中的关系- 例如,我有一个包含许多订单行的订单实体。我已经设置好我的应用程序,以便它热切地加载每个订单的订单行。您是否认为这是解决如果将获取策略设置为false会遇到的惰性
下面是Spring3.x和Hibernate3.x上的一个假设情况 我在Spring有一个服务层,它调用3个DAO来构建一个模型。DAO 是事务性的(@Transactional),并且具有延迟加载的Hibernate集合。 该服务方法会导致一些更新,以及数据的获取。 典型的DAO方法如下- 我有以下关于OSIV的问题 - 1.在默认的AUTO模式下,此会话刷新(数据库更新)多少次? 2.是否可以
我正在创建一个新项目,我对Spring冬眠管理有一些疑问。首先,我想说的是,我已经读了很多书,我试图记录自己,但几周后,我仍然对这个话题有点迷茫。 项目配置 > 我的架构遵循以下结构: JSF豆- 我的hibernate处理所有Dao,并与Spring完全集成。 一切似乎都集成得很好,但我仍然找不到一个可靠的解决方案来管理Hibernate会话。 我的第一种方法是使用JSF PhaseListen
但这不起作用,当我进入“loginriuscito.jsp”时,我只看到“welcome:”
主要内容:启用Struts2开发模式,禁用Struts 2的开发模式,参考在Struts2开发中,这应该是第一个学习配置的值。为了启用 Struts 2 的开发模式,可以通过自动配置显著增加Struts2的开发速度和属性文件加载,以及额外的日志和调试功能。 注:自动重新加载功能真的是一个方便的功能。 每次修改属性或XML配置文件更改,应用程序不再需要重启才能生效。 默认情况下,Struts 2的开发模式是禁用的。 启用Struts2开发模式 将“struts.devMo