hibernate之OpenSessionInView模式代码

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 util.HibernateUtil;

public class OpenSessionInViewFilter implements Filter {

    @Override
    public void destroy() {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        // 声明对象
        Session session = null;
        Transaction tx = null;
        // 异常处理
        try {
            // 开启session
            session = HibernateUtil.currentSession();
            // 开始事务
            tx = session.beginTransaction();            // 执行过滤
            chain.doFilter(request, response);

            tx.commit();  // 提交
        } catch (Exception e) {
            if(tx!=null)tx.rollback();
            e.printStackTrace();
        } finally {
            System.out.println("关闭session");
            HibernateUtil.closeSession();
        }

    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {

    }

}

最后更改web.xml文件配置

<filter>

  <filter-name>OpenSessionInViewFilter</filter-name>

  <filter-class>filter.OpenSessionInViewFilter</filter-class>

</filter>
<filter-mapping>

    <filter-name>OpenSessionInViewFilter</filter-name>

    <url-pattern>/*</url-pattern>

</filter-mapping>
时间: 2024-10-14 20:27:41

hibernate之OpenSessionInView模式代码的相关文章

[转]OpenSessionInView模式

OpenSessionInView模式解决的问题:   * hibernate事物边界问题 * 因session关闭导致hibernate延迟加载例外的问题 事物边界: 一个事物的完成应该是在业务层完成的,但是事物的创建却是在数据层来做,这样必定造成业务层和数据层耦合性增强. 延迟加载例外: 如你所知,延迟加载使用了动态代理机制,只有在真正使用这个对象的时候才会去访问数据库,但是如果在数据层进行了事物提交,session关闭,再去访问 数据就会导致延迟加载例外异常,所以我们必须加大session

Spring基于事件驱动模型的订阅发布模式代码实例详解

代码下载地址:http://www.zuidaima.com/share/1791499571923968.htm 原文:Spring基于事件驱动模型的订阅发布模式代码实例详解 事件驱动模型简介 事件驱动模型也就是我们常说的观察者,或者发布-订阅模型:理解它的几个关键点: 首先是一种对象间的一对多的关系:最简单的如交通信号灯,信号灯是目标(一方),行人注视着信号灯(多方): 当目标发送改变(发布),观察者(订阅者)就可以接收到改变: 观察者如何处理(如行人如何走,是快走/慢走/不走,目标不会管的

JS-构造函数模式代码实战和总结-极客

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 </head> 7 <body> 8 <script> 9 //构造函数模式代码实战和总结 10 11 //1 , 用户床垫特定类型的对象 12 //2,JS构造函

C# 桥模式代码

// Bridge pattern -- Real World exampleusing System;using System.Collections;// "Abstraction"class BusinessObject{ // Fields private DataObject dataObject; protected string group; // Constructors public BusinessObject( string group ) { this.grou

hibernate的dao模版代码

本提供来自:点击链接加入群[J2EE开发(SSH+IntelliJ IDEA)]:http://jq.qq.com/?_wv=1027&k=QtFTMx package com.mzq.dao; import java.io.Serializable; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.List; import java.util.regex.Ma

Hibernate与代理模式

代理模式:当需要调用某个对象的时候,不需要关心拿到的是不是一定是这个对象,它需要的是,我拿到的这个对象能够完成我想要让它完成的任务即可,也就是说,这时调用方可以拿到一个代理的一个对象,这个对象可以调用它想创建的对象的方法完成调用方的任务就好了. 静态代理模式模拟实例 应用场景介绍:这里有一个PDF,我想打开,但是,初始化的过程比较耗时,那么在这个时候如果在创建对象的时候直接初始化那么势必会消耗掉一定的时间,但是并不一定初始化完成以后就直接要打开,可能过一段时间之后才需要打开呢,是有可能的. Fi

hibernate配置文件、Java代码与数据库之间的转换

此贴适合初学者,技术大脑请绕道! 一.配置文件 第一步:建立项目工程,以hibernate01为例 第二步:点击项目名称-->Myeclipse--> Project Facets[Capabilities]-->Install Hibernate Facet-->yes 出现下图,选择Target runtime 选择next 包建立后next  配置文件完成 二.生成数据库表(在一的基础上完成) 创建所需要的类和配置文件 例如:    创建包 Test 点击运行 数据表建立成功

给大家分享一段启动模式代码

============问题描述============ 给大家分享一段启动模式的代码 @TargetApi(Build.VERSION_CODES.GINGERBREAD) @SuppressWarnings("unused") @Override public void onCreate() { if (Config.DEVELOPER_MODE && Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBRE

hibernate操作步骤(代码部分)

1.加载hibernate的核心配置文件 2.创建SessionFactory对象 3.使用SessionFactory创建Session对象 4.开启事务(手动开启) 5.写具体逻辑crud,增删改查操作 6.提交事物 7.关闭资源 代码如下: 1 package com.hui.hibernate; 2 3 import org.hibernate.Session; 4 import org.hibernate.SessionFactory; 5 import org.hibernate.T