问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于spring mvc+hibernate使用OpenSessionInViewFilter导致乐观锁version失效的问题。

发布网友 发布时间:2022-04-11 04:46

我来回答

2个回答

懂视网 时间:2022-04-11 09:07

com.project.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import org.hibernate.Session; import org.hibernate.Transaction; import com.project.util.HibernateUtil; public class OpenSessionInViewFilter implements Filter{ @Override public void destroy() { } @Override public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { Session session = null; Transaction ts = null; try { session = HibernateUtil.getSession(); ts = session.beginTransaction(); System.out.println("---------begin Filter---------"); chain.doFilter(req, resp); System.out.println("---------end Filter---------"); ts.commit(); } catch (Exception e) { if(ts!=null)ts.rollback(); throw e; }finally{ HibernateUtil.closeSession(); } } @Override public void init(FilterConfig arg0) throws ServletException { } }

2、hibernateUtil类

package com.project.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
 private static Configuration cfg = null;
 private static StandardServiceRegistry registry = null;
 private static SessionFactory factory = null;
 private static ThreadLocal<Session> sessionLocal = null;
 
 static{
 //1、读取hibernate.cfg.xml配置文件
 cfg = new Configuration().configure();
 //2、创建服务注册器
 registry = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();
 //3、新建sessionFactory对象
 //sessionFactory是一个重量级对象,在一个应用只需一个即可,是进程级别的对象,可以在集群中使用,操作完后不释放
 factory = cfg.buildSessionFactory(registry);
 //4、创建threadLocal(成员私有,线程安全)
 sessionLocal = new ThreadLocal<>();
 }
 //获取session对象
 public static Session getSession(){
 //session不为空且session未被打开时,session设置为null
 if(sessionLocal.get() != null && !sessionLocal.get().isOpen()){
  sessionLocal.set(null);
 }
 //session为null时,创建session
 if(sessionLocal.get() == null){
  sessionLocal.set(factory.openSession());
 }
 return sessionLocal.get();
 }
 
 //关闭session
 public static void closeSession(){
 if(sessionLocal.get() != null){
  //session调用close不一定清除session对象
  sessionLocal.get().close();
  //所以sessionLocal中session对象设置为null
  sessionLocal.set(null);
 }
 }
}

3、dao使用

package com.project.dao.impl;

import java.util.List;

import org.hibernate.Session;

import com.project.dao.EmployeeDao;
import com.project.pojo.Employee;
import com.project.util.HibernateUtil;

public class EmployeeDaoImpl implements EmployeeDao{

 @Override
 public List<Employee> find() {
 /**
  * HibernateUtil.getSession()与filer中使用的是同一个session
  */
 Session session = HibernateUtil.getSession();
 List<Employee> list = session.createCriteria(Employee.class).list();
 return list;
 }

}

 

hibernate基础14:OpenSessionInView(抽取web访问时对数据库开关事务)

标签:cep   row   EDA   关闭   over   对象   hibernate   stat   private   

热心网友 时间:2022-04-11 06:15

OpenSessionInViewFilter是Spring提供的一个针对Hibernate的一个支持类,其主要意思是在发起一个页面请求时打开Hibernate的Session,一直保持这个Session,直到这个请求结束,具体是通过一个Filter来实现的。
  由于Hibernate引入了Lazy Load特性,使得脱离Hibernate的Session周期的对象如果再想通过getter方法取到其关联对象的值,Hibernate会抛出一个LazyLoad的Exception。所以为了解决这个问题,Spring引入了这个Filter,使得Hibernate的Session的生命周期变长。
  有两种方式可以配置实现OpenSessionInView,分别是OpenSessionInViewInterceptor和OpenSessionInViewFilter,功能完全相同,只不过一个在web.xml配置,另一个在application.xml配置而已。我个人比较倾向配置在application.xml里,因为web.xml里配置的东西的太多的话容易发生冲突,虽然可以调整,但是毕竟多了个麻烦。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
信息系统集成资质几级最高 计算机信息系统集成企业资质等级评定条件计算机信息系统集成企业资质等 ... 计算机信息系统集成企业资质等级评定条件实施细则一级资质 win10电脑密码错误win10开机密码错误 windows怎么更换密码错误 电脑没设置密码老是显示密码不正确电脑密码一直显示输入不正确 我把苹果手机系统 。 一更新 。 卡着了 。 然后就这样了 。 这出现... 我iphone想更新到9,是直接在手机按的更新,但是中途变成了这样 为什么有时早上4点多觉胸一下感觉很累的像给人吓一跳似 睡觉醒来时觉得胸部难受有点累是怎么回事 修改后,我已删除的好友还能再找到我吗? mybatis的延迟加载怎么办?hibernate有opensessioninview,mybatis 荣达幼教集团金英幼儿园学校微信公众号 鄂尔多斯市幼儿教师可以和乌海教师对调吗? 男幼师的一些问题 我是专科的在校学生、学前教育专业、以后想做幼师。请问在校期间能考什么证书 我是内蒙古幼师大专毕业,现在想升内蒙古师范大学的学前教育,该怎么做 2021鄂尔多斯伊金霍洛旗招聘108中小学幼儿园教师体检和考核? 鄂尔多斯幼儿教师考试笔试面试分占多少? 我我我上的专科的 学学前教育 我想问,这个专业接本有用么 还有就是 还需要考什么证书么。。 额尔多斯职业技术学院2020年自主招生学前教育专业年学费多少钱? 鄂尔多斯特殊教育学院单招职高幼师吗? 现在鄂尔多斯3加2的幼师专业学校有哪些可以在哪就业 鄂尔多斯职业学院幼师类考学前多少分? spring的opensessioninview配置问题,hibernate的session在查询完数据后,要close吗? 初中毕业学幼师鄂尔多斯市哪所学校可升本? hibernate高手进,关于openSessionInViewInterceptor Phoenix的其它释义 死亡飞车3 地狱烈焰女主角叫什么名字 AI Phoenix的资料 95512是平安保险吗? 95512电话车险同直接到保险公司投保区别 我接到95512的电话推销和我说了很多,最后他问我是否出单,我问他出单只后可以不从那个保险公司上吗 u0126-71方向盘角度传感器在哪 道奇酷威发动机故障灯亮故障原因是U012600与转向角传感器通信中断这是什么原因? 陆虎揽胜07款 地盘不能升降 读取故障码后U0126和角度传感器信号丢失 仪表上转向 刹车 大灯故障灯在亮 求助 福特翼虎故障码u0126 名爵zs故障码U0126方向盘转角信号丢失是什么原因? 丰田霸道u0126故障码 12年福克斯亮防滑灯报U0126 宝骏560故障码u012662 dc u接收转向角报文无效是什么地方出现问题了? 转向角传感器故障的原因 转向角传感器数据故障是坏了、还是要校正、还是没擦好? hibernate中怎么得到session 很多人为什么嘲笑女人35岁以后不能生孩子?我以为可以生孩子 女人35岁以后生孩子,虽有风险,但哪些好处年轻宝妈羡慕不来? p30pro光感怎么修复 怎样获取hibernate的session 为什么我用淘宝买东西支付时,只能添加银行卡支付,而不能用支付宝余额支付,没有选择支付方式。 手机淘宝里要购买东西是不是用支付宝里的余额购买?