请教spring 事物管理问题及OpenSessionInViewFilter使用

toitorse2 2016-09-19 10:35:01
问题描述1、:我在web.xml文件中配置OpenSessionInViewFilter,能访问数据库,但事物不起作用,updata等操作需要手动开启事物;若在web.xml不配置OpenSessionInViewFilter,则无法访问数据库,错误提示“HTTP Status 500 - Request processing failed; nested exception is org.hibernate.HibernateException: No Session found for current thread”,请教这是什么原因。

2、请教下,我的sping事物管理是否正确

sping配置文件:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/mysqldb?useSSL=true" />
<property name="username" value="root" />
<property name="password" value="123456*" />
<!-- 连接池启动时的初始值 -->
<property name="initialSize" value="30" />
<!-- 连接池的最大值 -->
<property name="maxActive" value="500" />
<!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
<property name="maxIdle" value="2" />
<!-- 最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->
<property name="minIdle" value="1" />
</bean>

<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
<!-- <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop> -->

<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<!-- -->
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.max_fetch_depth">1</prop>
<prop key="hibernate.use_sql_comments">true</prop>
<prop key="hibernate.cache.use_second_level_cache">true</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
<prop key="hibernate.generate_statistics">true</prop>
<prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext
</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/dfp/domain/User.hbm.xml</value><!-- 加载hibernate的映射文件*.hbm.xml -->
</list>
</property>
</bean>

<!-- 配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>


<bean id="basicService" class="com.basic.BasicService">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager" />
<context:component-scan base-package="com.basic.*" />
...全文
338 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
howsun_zh 2016-09-28
  • 打赏
  • 举报
回复
1、既然用了hibernate4,就统一起来,OpenSessionInViewFilter也用hibernate4包里的 2、hibernate4事务方式与hibernate3有所不同 将@Transactional放在类名上,再测试一下。
toitorse2 2016-09-27
  • 打赏
  • 举报
回复
其中部分代码 @Service public class BasicService implements BasicServiceInter { @Resource private SessionFactory sessionFactory; public SessionFactory getSessionFactory() { return sessionFactory; } public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } @Transactional public void update(Object object) { // TODO Auto-generated method stub //System.out.println("user12121"); /*手动事物管理*/ Session session=sessionFactory.openSession(); session.beginTransaction(); session.update(object); session.getTransaction().commit(); session.close(); //this.sessionFactory.getCurrentSession().update(object); //System.out.println("user"); } }
天涯星辰 2016-09-23
  • 打赏
  • 举报
回复
<filter> <filter-name>Spring OpenSessionInViewFilter</filter-name> <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> <init-param> <!-- 指定org.springframework.orm.hibernate3.LocalSessionFactoryBean在spring配置文件中的名称,默认值为sessionFactory 如果LocalSessionFactoryBean在spring中的名称不是sessionFactory,该参数一定要指定,否则会出现找不到sessionFactory的例外 --> <param-name>sessionFactoryBean</param-name> <param-value>sessionFactory</param-value> </init-param> </filter> <filter-mapping> <filter-name>Spring OpenSessionInViewFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
天涯星辰 2016-09-23
  • 打赏
  • 举报
回复
可能是你配置的serssionfactory的问题
howsun_zh 2016-09-23
  • 打赏
  • 举报
回复
贴出事务注解看看
toitorse2 2016-09-23
  • 打赏
  • 举报
回复
没人回复,自己顶下

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧