hibernate中OpenSessionInView方式的实现

无线自组织网络基础知识 参考书籍:《无线自组织网络路由协议及应用》 目录第一章 绪论1.1 无线自组织网络概述1.1.1 无线自组织网络的定义及分类1.1.2无线自组织网络的主要特点1.1.3无线自组织网络的应用与发展1.无线自组织网络的应用2.无线自组织网络的起源和发展1.2典型的无线自组织网络1.2.1移动Ad Hoc网络1、移动Ad Hoc网络的定义2.移动AdHoc网络的特点3.移动Ad Hoc网络的应用1.2.... 阅读详情

OpenSessionInView:由于Hibernate引入了Lazy Load特性,使得脱离Hibernate的Session周期的对象如果再想通过getter方法取到其关联对象的值,Hibernate会抛出一个LazyLoad的Exception。所以为了解决这个问题,使得Hibernate的Session的生命周期变长。

步骤:

一、创建一个web Ojbect 项目

二、数据库为MySql

CREATE TABLE `user` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `name` varchar(50) NOT NULL,

  `birthday` datetime DEFAULT NULL,

  `sex` varchar(50) NOT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=gb2312;

 

三、在MyEclipse 中添加hibernate3x jar文件,或者通过MyEclipse的支持方式加入

 

四、更改hibernate.cfg.xml 文件配置 

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>
    <session-factory>
    	<property name="hibernate.connection.driver_class" >com.mysql.jdbc.Driver</property>
    	<property name="hibernate.connection.url">jdbc:mysql:///test</property>
    	<property name="hibernate.connection.username">root</property>
    	<property name="hibernate.connection.password">root</property>
    	<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    	<property name="hibernate.show_sql" >true</property>
    	<property name="hibernate.format_sql" >true</property> 
    	<mapping resource="com/entity/User.hbm.xml" />
    </session-factory>	
</hibernate-configuration>

 

 

五、创建一个Hibernate获取session的工具类HibernateBase.java

  

package com.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public final class HibernateBase {
	private static SessionFactory sessionFactory;
	//创建一个线程本地变量 
	private static ThreadLocal threadLocal = new ThreadLocal();
	private HibernateBase(){}
	//本地线程添加session
	public static Session getThreadLocal(){
		Session session = (Session) threadLocal.get();
		if (session == null) {
			session = getSession();
			threadLocal.set(session);
		}
		return session;
	}
	public static SessionFactory getSessionFactory(){
		if (sessionFactory==null) {
			Configuration cf = new Configuration();
			cf.configure();
			sessionFactory = cf.buildSessionFactory();
		}
		return sessionFactory;
	}
	
	public static Session getSession(){
		return getSessionFactory().openSession();
	}
}

 

六、创建实体对象 

   

package com.entity;
import java.util.Date;
public class User {
	private Integer id;
	private String name;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	private Date birthday;
	private String sex;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
}

 

七、创建实体映射文件User.hbm.xml

 

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.entity.User" table="user">
       <!—二级缓存   <cache usage="read-only"/> -->
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native"></generator>
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" length="50" not-null="true" />
        </property>
        <property name="birthday" type="java.util.Date">
        	<column name="birthday"></column>
        </property>
        <property name="sex" type="java.lang.String">
        	<column name="sex" length="50" not-null="true"></column>
        </property>
    </class>
</hibernate-mapping>

 

八、创建一个通用的dao文件,HiberanteDaoImpl.java

package com.dao.impl;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import com.util.HibernateBase;
public class HiberanteDaoImpl { 
	private static Session session;
	/**
	 * openSessionInView方式采用
	 * @param object
	 */
	public void addThread(Object object){
		try {
		    session =  (Session) HibernateBase.getThreadLocal();
			session.save(object);
		} catch (HibernateException e) {
			e.printStackTrace();
		}
	}
	/**
	 * openSessionInView方式采用 删除
	 * @param object
	 */
	public void delThread(Object object){
		try {
		    session =  (Session) HibernateBase.getThreadLocal();
			session.delete(object);
		} catch (HibernateException e) {
			e.printStackTrace();
		}
	}
}

 

 

 

九、创建过滤器:主要采用过滤的方式进行OpenSessionInView.java

 

package com.web;
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.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.util.HibernateBase;

public class OpenSessionInView implements Filter {
@Override
	public void destroy() {
		// TODO Auto-generated method stub
	}
@Override
	public void doFilter(ServletRequest arg0, ServletResponse arg1,
			FilterChain arg2) throws IOException, ServletException {
		Session session = null;
		Transaction tx = null;
		try {
			session = (Session) HibernateBase.getThreadLocal();
			tx = session.beginTransaction();//事物开始 在视图层创建事物
			arg2.doFilter(arg0, arg1);
			tx.commit();
			session.close();
		 
		} catch (HibernateException e) {
			if (tx!=null) {
				tx.rollback();
			}
		}finally{
			//不能关闭session 
		}
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
	}
}

  

十、 创建servlet文件UserServlet.java

 

  

package com.web;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.dao.impl.HiberanteDaoImpl;
import com.entity.User;
public class UserServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		//添加user对象 然后再删除 这里就不做视图的创建了,通过servlet简单演示
		User user = new User();
		user.setName("abc");
		user.setBirthday(new Date());
		user.setSex("男");
		HiberanteDaoImpl dao  = new HiberanteDaoImpl();
		dao.addThread(user);  //添加
		dao.delThread(user); //删除	
		out.flush();
		out.close();
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doGet(request, response);
	}
}

 

十一、 打开浏览器输入http://localhost:8080/hibernate/userServlet

 

Python爬虫实战:携程旅游平台数据爬取(酒店+机票+景点),破解加密与反爬(附完整代码) 携程的反爬机制再复杂,核心逻辑都是“识别非真实用户的请求”,而爬虫的核心就是“让请求看起来像真实用户的行为”。本文的方案从登录态处理、参数加密破解、动态数据抓取,到反爬应对,都是围绕“模拟真实”展开:用Playwright模拟真实浏览器登录,用住宅代理模拟真实用户IP,用随机延迟模拟真实用户的操作频率。掌握了这个核心思路,无论平台的反爬如何升级,都能找到应对方法。当然,爬虫技术是一把双刃剑,合理使用才能发挥其价值。如果你的爬虫项目中遇到了携程的反爬问题,不妨按照本文的步骤试试,大概率能解决问题。 阅读详情

相关推荐

SAPABAP金色传说:关于导入和导出Excel时反复弹窗提示 SAP GUI安全性问题的解决方法

文章目录前言一、提示的到底是什么?二、关闭SAP GUI安全提示的步骤1.设置位置 前言 如果你在SAP中,经常需要将数据导出Excel,或者使用Excel进行批导数据,那么你对下面这个频繁出现的弹窗提示一定不陌生! 系统试图创建文件 C:\Users\15265\Desktop\EXPORT.XLSX 于目录 C:\Users\15265\Desktop\ 是否要授权修改父目录及其所有子目录? 不管你是不是选的记住我的决定,它必出!就很烦!那如何处理才能关闭呢? 提示:以下是本篇文章正文内容,看完快

Easystudios博客 1万+

Hibernate温习(17)--OpenSessionInView模式

在WEB应用程序中,视图(JSP或Servlet)可能会通过导航从某个托管对象中拖出它的关联对象或集合数据,这些关联对象或集合数据如果是被延迟加载的(Hibernate本身就有几种默认延迟加载的情况,欲了解更多请看前面的文章),Hibernate就会抛出LazyInitializationException.因为没有持久化上下文存在时,是无法加载违背初始化的代理和集合的。 针对这个问题,Hibe...

JavaCrazyer的ItEye(codewu.com)技术博客 255

基于MATLAB/Simulink与WSL2的ROS2实时联合仿真实践

本文详细介绍了基于MATLAB/Simulink与WSL2的ROS2实时联合仿真实践。通过环境配置、PX4仿真环境搭建、自定义消息生成、Simulink通信实现及实时优化等步骤,提供了完整的无人机位置控制案例,帮助开发者实现高精度的实时联合仿真。

red88的博客 203

阿录帮帮忙—hibernate配置OpenSessionInView还是:could not initialize proxy - no Session

问题:hibernate延迟加载:配置了OpenSessionInView但还是:could not initialize proxy - no Session

maihemude的专栏 600

Android13配置selinux让system应用可读sys,proc,SN号

Android13预置的system应用,需要读/sys, /proc目录,读(SN)serial number号, 需要修改selinux配置,否则会报avc错.其修改方法会比Android11复杂一些.。

zmlovelx(帅得不敢出门 程序员群31843264) 2654

STM32CubeMx + FatFs 实战:SD卡DMA传输中断回调问题深度解析

本文深度解析了在STM32CubeMx环境下,结合FatFs文件系统并使用DMA进行SD卡读写时,程序可能出现的“卡死”问题。核心原因在于HAL库的弱函数回调机制未被正确处理,导致DMA传输完成中断后,状态机锁死。文章提供了两种实战修复方案:直接修改HAL库文件或在用户代码中重写回调函数,并给出了关键的配置检查点与调试技巧,帮助开发者彻底解决SD卡DMA传输中断回调失效的难题。

weixin_29176179的博客 330

Hibernate的OpensessionInView模式

一 、在javaweb中使用hibernate实现DAO,出现关联方数据在视图层加载的问题。 解决办法: 把关联方的加载方式,改为lazy=false, 即时加载 使用OpenSessionInView模式,在视图层重新打开session,访问数据库。 二 、OpenSessionInView模式的实现原理: 首先要使用getCurrentSession打开session openSession和getCurrentSession方法的区别: openSession 从字面上可以看得出来,是打开一个

豪华的博客 400

VMware使用Windows、WinXP等虚拟机上不了网的解决办法(管用)

这个情况一般出现在可以插网线的电脑上,比如台式机和有网线插口的笔记本。需要转换器才能插网线的笔记本一般不会出现这种情况. 查看主机的IP地址和虚拟机的IP地址是否在同一网段,如果在的话,虚拟机就能上网了!!(备注:虚拟机中的IP地址一定要和主机中的用来上网的那个连接的IP地址相同哦)。

爱吃雪糕的小布丁的博客 1万+

8.Hibernate Open Session In View模式

是什么在Open Session In View模式    hibernate中使用load方法时,并未把数据真正获取时就关闭了session,当我们真正想获取数据时会迫使load加载数据,而此时 session已关闭,所以就会出现异常。 比较典型的是在MVC模式中,我们在M层调用持久层获取数据时(持久层用的是load方法加载数据),当这一调用结束时,session随之关闭,而我们 希望在V层使

柠檬需要糖 1770

通过InoDriverShop伺服调试软件连接汇川SV660F系列伺服的具体方法示例

通过InoDriverShop伺服调试软件连接汇川SV660F系列伺服的具体方法示例

Robot_PLC_HMI_Automation 1万+

避坑指南:新手爬百度图片3个致命错,改完批量保存本地(亲测有效)

新手爬百度图片的核心是“绕开静态HTML,抓准API接口+处理反爬+提取原图”,改完本文提到的3个核心错,就能稳定批量保存高清图片。这套思路可复用在其他图片网站(如必应图片、360图片),只需修改API接口和参数即可。如果想进一步优化,可添加代理IP池、多线程下载(新手不建议,容易触发反爬)、图片去重等功能!

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1586

【Hibernate】细说OpenSessionInView问题

【环境参数】 环境:SSH框架 【问题描述】 NoSession问题 HibernateTemplate对象提供的方法如果使用“延迟加...

cjjwuh5400551的博客 241

在Simulink中搭建一个基于IoT设备间通信协议栈的仿真模型

物联网(IoT)设备间的通信协议栈仿真对于理解不同层级的协议如何协同工作,以及优化网络性能至关重要。通过Simulink结合MATLAB的强大功能,我们可以模拟和分析从物理层到应用层的完整通信过程。下面详细介绍如何使用Simulink进行IoT设备间通信协议栈的仿真。

amy_mhd的博客 156

Spring Hibernate OpenSessionInView学习

 http://blog.youkuaiyun.com/vvggsky/archive/2006/12/13/1441664.aspxhttp://blog.youkuaiyun.com/vvggsky/archive/2006/12/13/1441664.aspx在没有使用Spring提供的Open Session In View情况下,因需要在service(or Dao)层里把session关闭,所以laz

element1999的专栏 1060

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

hibernate OpenSessionInView

一、什么是OpenSessionInView 在hibernate中使用load方法时,并未把数据真正获取时就关闭了session,当我们真正想获取数据时会迫使load加载数据,而此时session已关闭,所以就会出现异常。 比较典型的是在MVC模式中,我们在M层调用持久层获取数据时(持久层用的是load方法加载数据),当这一调用结束时,session随之关闭,而我们希望在V层使用这些数据,这时

opzoonzhuzhengke的专栏 812

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

什么是OpenSessionInView

  一、什么是OpenSessionInView   在hibernate中使用load方法时,并未把数据真正获取时就关闭了session,当我们真正想获取数据时会迫使load加载数据,而此时session已关闭,所以就会出现异常。 比较典型的是在MVC模式中,我们在M层调用持久层获取数据时(持久层用的是load方法加载数据),当这一调用结束时,session随之关闭,而我们希望在V...

zwt2001267的专栏 125

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

OpenSessionInView模式运用

转自:http://kewb.iteye.com/blog/128726,自己常用第一种,留作随笔!   Spring+Hibernate中OpenSessionInView模式运用 配置OpenSessionInView模式也很简单,Spring提供了两种方式:1、过滤流Filter &lt;filter&gt;&lt;filter-name&gt;OpenSessionInView...

Only the heart peace will be prosperity 133

OpenSessionInView

一、什么是OpenSessionInView   在hibernate中使用load方法时,并未把数据真正获取时就关闭了session,当我们真正想获取数据时会迫使load加载数据,而此时session已关闭,所以就会出现异常。 比较典型的是在MVC模式中,我们在M层调用持久层获取数据时(持久层用的是load方法加载数据),当这一调用结束时,session随之关闭,而我们希望在V层使用这些数据...

hburain的博客 118

OpenSessionInView模式

 OpenSessionInView模式 Spring+Hibernate中,  集合映射如果使用lazy="true", 当PO传到View层时, 出现未初始化session已关闭的错误,只能在dao先初始化parent.getChilds().size();Spring提供Open Session In View来解决这个问题, 有两种方式1. Interceptor

sumongh我们在一起 1066

过滤器方式打开Hibernate_session

使用过滤器方式: 好处: 在不同页面中需要或不需要数据,可以通过延迟关闭session来获取页面中所需要的数据

st_linxiaoling的专栏 456

spring OpenSessionInView

参考文献: http://blog.youkuaiyun.com/wuseyukui/article/details/16113785 http://justsee.iteye.com/blog/1174999 http://www.cnblogs.com/jaredlam/archive/2011/11/22/2259451.html     在hibernate中使用load方法时,并未把

小小布的程序世界 501

Hibernate(九)__OpenSessionInView解决懒加载问题

什么是OpenSessionInView? 在hibernate中使用load方法时,并未把数据真正获取时就关闭了session,当我们真正想获取数据时会迫使load加载数据,而此时session已关闭,所以就会出现异常。 比较典型的是在MVC模式中,我们在M层调用持久层获取数据时(持久层用的是load方法加载数据),当这一调用结束时,session随之关闭,而我们希望在V层使用这些数据,这时...

weixin_30457465的博客 102

spring的OpenSessionInView用法

Spring+Hibernate中,  集合映射如果使用lazy="true", 当PO传到View层时, 出现未初始化session已关闭的错误,只能在dao先初始化 parent.getChilds().size(); Spring提供Open Session In View来解决这个问题, 有两种方式1. Interceptor     &lt;!-- ==...

justinok的专栏 227
上一篇: 乐观锁和悲观锁
下一篇: Hibernate3已经不再支持DBCP连接池,而推荐使用C­3PO
VirusFu
博客等级 码龄21年 51粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值