Hibernate Session机制与项目设计(高效性) 问题,高手请进(散分)

问题描述

我们在做项目的时候,总是会考虑对每一个操作打开一个新的session,然后对session进行单独的操作,然后关闭session。如果,我在整个项目运行的时候,都是通过一个session来进行,也就是说,所有的操作都是在一个session中进行,而这个session是不关闭的,只有等到tomcat关闭的时候session才关闭,这样会出问题吗?用一个session来管理缓存,这样效率高吗?

解决方案

解决方案二:
tomcat关闭的时候session才关闭,这样会出问题吗?这样会使系统不安全.而且效率非常的低.如果你闲麻烦就用spring的事务管理.几行配置就搞定..
解决方案三:
引用1楼wxwlion0425的回复:

tomcat关闭的时候session才关闭,这样会出问题吗?这样会使系统不安全.而且效率非常的低.如果你闲麻烦就用spring的事务管理.几行配置就搞定..

现在的问题是,由于整个项目都是在同一个session中运行,怎么才可以让项目在tomcat关闭之前把session关闭。
解决方案四:
up
解决方案五:
应该可以,接分
解决方案六:
不可以简单的说,web程序是运行在一个多线程环境中,session是线程安全的,session不应跨线程访问。至于说tomcat关闭的事后做些什么是没问题的,javax.servlet.ServletContextListener就可以干
解决方案七:
帮你顶一下。
解决方案八:
顶五楼的
解决方案九:
web应用程序一定是多线程的。而session不是线程安全的。如果所有的请求在访问数据库时,都用一个session,会产生非常严重的资源争用问题。sessionFactory是线程安全的,相应的它的成本也比较高,在每一个线程中,从线程安全的sessionFactory得到session,才是正确的做法。session作为jdbcConnection的一个高级封装,应该在事务边界范围外,尽晚得到尽早释放。一般的项目,如果用支持声明式事务的javaEE容器,事务边界都在biz层。容器会帮助你保证session的范围。楼主你现在是在异想天开,你还不知道正常的应用是什么样子。再多看看书吧。
解决方案十:
在项目中只用一个session是不可取的。Hibernate作为一个轻量级框架,创建和关闭一个session是不会影响系统性能的。而且对每一个业务(用户的一次操作)创建一个session也方便事务的管理。对于缓存问题,SessionFactory,也就是Hibernate的第一级缓存,它的创建是一个很耗时的过程,在系统启动或第一次访问时创建,具体的创建过程我们不用关心,对于Session,Hibernate的第二级缓存,当提交事务时会自动清理缓存,或手动clear。
解决方案十一:
顶下9楼的
解决方案十二:
session是多线程可以创建多个实例,理论上session是现成安全的,一个线程只用一个实例,就是要避免多个线程共享一个session;如果用一个线程共享数据的时候.用session.flush(强制缓存与数据库同步更新时候会出现混乱的,容易出错;可以把想共享的数据放在二级缓存中,能够一次运行的就用session处理;优化还可以设置清理缓存的级别:session.setFlushMode(FlushMode.COMMIT):FlushMode.COMMIT只在递交的时候,清理缓存,在只是查询无修改的状况下用此模式,会节省资源;FlushMode.AUTO,默认,保持数据的顺序;
解决方案十三:
引用8楼gordonkkk的回复:

web应用程序一定是多线程的。而session不是线程安全的。如果所有的请求在访问数据库时,都用一个session,会产生非常严重的资源争用问题。sessionFactory是线程安全的,相应的它的成本也比较高,在每一个线程中,从线程安全的sessionFactory得到session,才是正确的做法。session作为jdbcConnection的一个高级封装,应该在事务边界范围外,尽晚得到尽早释放。一般的项目,如果用支持声明式事务的javaEE容器,事务边界都在biz…

我说的嘛,看了上面的回答说session是线程安全的,我还在怀疑呢。。。。。session不是线程安全的,而且是轻量级的对象,放心的new吧。
解决方案十四:
引用8楼gordonkkk的回复:

web应用程序一定是多线程的。而session不是线程安全的。如果所有的请求在访问数据库时,都用一个session,会产生非常严重的资源争用问题。sessionFactory是线程安全的,相应的它的成本也比较高,在每一个线程中,从线程安全的sessionFactory得到session,才是正确的做法。session作为jdbcConnection的一个高级封装,应该在事务边界范围外,尽晚得到尽早释放。一般的项目,如果用支持声明式事务的javaEE容器,事务边界都在b…

现在我就是不知道在多线程的环境下会不会出问题,但是,共用一个session也是有好处的啊,例如,我们就没有脱管对象了,这样,我们的每次对对象的操作就可以直接从session缓存里面拿,而且拿到的对象都是持久化的,而每次修改都会直接存入数据库,我们只需要控制session.flush()跟事务就可以很好地实现数据的存储。我知道session是一个轻量级的资源,但是是不是线程安全的我就不知道了。不知道我这么想对不对?
解决方案十五:
引用8楼gordonkkk的回复:

web应用程序一定是多线程的。而session不是线程安全的。如果所有的请求在访问数据库时,都用一个session,会产生非常严重的资源争用问题。sessionFactory是线程安全的,相应的它的成本也比较高,在每一个线程中,从线程安全的sessionFactory得到session,才是正确的做法。session作为jdbcConnection的一个高级封装,应该在事务边界范围外,尽晚得到尽早释放。一般的项目,如果用支持声明式事务的javaEE容器,事务边界都在b…

现在我就是不知道在多线程的环境下会不会出问题,但是,共用一个session也是有好处的啊,例如,我们就没有脱管对象了,这样,我们的每次对对象的操作就可以直接从session缓存里面拿,而且拿到的对象都是持久化的,而每次修改都会直接存入数据库,我们只需要控制session.flush()跟事务就可以很好地实现数据的存储。我知道session是一个轻量级的资源,但是是不是线程安全的我就不知道了。不知道我这么想对不对?
解决方案:

解决方案:
sessionFactory本身是个session池,可以说在里面拿个session不会有太大影响,而且也容易管理
解决方案:
session的创建还是比较消耗资源的,其实一开始lz的想法是可以采用的,就是建立session管理器,或者session池。这样的功能一般的应用服务器都会有实现,所以lz不需要自己动手实现,可以考虑使用应用服务器的数据源方式连接数据库。把管理session的功能交给服务器这样比较好。
解决方案:
引用9楼zhangzhenting的回复:

在项目中只用一个session是不可取的。Hibernate作为一个轻量级框架,创建和关闭一个session是不会影响系统性能的。而且对每一个业务(用户的一次操作)创建一个session也方便事务的管理。对于缓存问题,SessionFactory,也就是Hibernate的第一级缓存,它的创建是一个很耗时的过程,在系统启动或第一次访问时创建,具体的创建过程我们不用关心,对于Session,Hibernate的第二级缓存,当提交事务时会自动清理缓存,或手动clear。

Session级缓存是内部缓存,也就是一级缓存SessionFactory级的缓存才是二级缓存!!!
解决方案:
不是很明白。
解决方案:
学习帮顶
解决方案:
顶18楼
解决方案:
引用楼主ben0759的帖子:

我们在做项目的时候,总是会考虑对每一个操作打开一个新的session,然后对session进行单独的操作,然后关闭session。如果,我在整个项目运行的时候,都是通过一个session来进行,也就是说,所有的操作都是在一个session中进行,而这个session是不关闭的,只有等到tomcat关闭的时候session才关闭,这样会出问题吗?用一个session来管理缓存,这样效率高吗?

session不关闭是个非常不好的事情,要是业务请求不多倒是不会出现什么问题你要是做的系统稍微大一些,请求多而复杂你到运行测试时就会出现意想不到的错误所以建议你对session进行控制和管理我的习惯是在业务层专门建立一个session的管理类,里面负责对session进行管理其他的业务请求处理类直接调用就可以了
解决方案:
session是一级缓存,不应该让session共享.可以用ThreadLocal类为每一个线程配一个session.
解决方案:
Sessionsession=HibernateUtil.getSessionFactory().getCurrentSession();这种用法呢?
解决方案:
引用22楼yinyuan1987的回复:

引用楼主ben0759的帖子:我们在做项目的时候,总是会考虑对每一个操作打开一个新的session,然后对session进行单独的操作,然后关闭session。如果,我在整个项目运行的时候,都是通过一个session来进行,也就是说,所有的操作都是在一个session中进行,而这个session是不关闭的,只有等到tomcat关闭的时候session才关闭,这样会出问题吗?用一个session来管理缓存,这样效率高吗?session不关闭是个非常不好的…

具体怎么样?
解决方案:
up
解决方案:
up
解决方案:

解决方案:

解决方案:
不知道会不会造成内存溢出问题。。
解决方案:
引用32楼cxalxpks的回复:

不知道会不会造成内存溢出问题。。

也是,不知道并发好不好。
解决方案:
spring有非常完善的hibernate管理机制用springhibernate模板来管理你不用考虑这些问题事物问题也非常好解决,只需要配置
解决方案:
本人一直都是把session交给spring来管理
解决方案:
支持用spring。。。
解决方案:
不可以,也没必要那样用

时间: 2024-09-13 17:15:58

Hibernate Session机制与项目设计(高效性) 问题,高手请进(散分)的相关文章

hbm-Hibernate 帅哥高手请进...关于Hibernate的三表关联,在线等...

问题描述 Hibernate 帅哥高手请进...关于Hibernate的三表关联,在线等... 表1: File (FID,Fname) 表2: UserGroup(GID,Gname) 表3: ActionPermissions(PID,Pname) 表4: File_Group_Permissions(ID,FID,GID,PID) 用四个表完成给某个文件指定用户组每个用户组指定权限,一文件对应多个用户组 每个用户组针对这个文件有不同的操作权限.Hibernate应该如何配置,表结构是否合理

高手请进--hibernate 子查询,折磨我好几天了

问题描述 我有个表用来存储论坛的Topic活Reply,结构如下: @Entity @Table(name = "TopicOrReply") public class TopicOrReply implements Serializable{ private Long id; private String title;//标题,如果为空,那么表示"回复". private TopicOrReply repliedTopic;//指向该回复对应的topic ...

Spring 2 + Hibernate 3 事务整合问题,高手请进

问题描述 公司一直在用Spring+hibernate作为开发框架,事务采用spring声明式,我指定了在BPO(业务层)类中以×TX方法以事务执行,有以下类publicclassBmsLogFacade{privateBmsLogBPOmyBmsLogBPO;publicvoidwriteLogSave(){TBmsLogDTOdto=getLogDTO();myBmsLogBPO.saveTX(dto);System.out.println(dto.getId());}publicvoidw

关于,net更新机制 高手请进 已经挂了2天了 没办法解决版主是否可以帮忙(在线等)

问题描述 存储过程如下:CREATEPROCEDUREUpdate_FinishedProductPlan@FinishedProductPlanDatechar(10),@TradeModechar(50),@Articlechar(30),@Colourchar(20),@ColourCodechar(40),@PlannedHidesint,@SRLNochar(10),@Priorityint,@Destinationchar(50),@Remarkschar(100),@Finishe

Cookie 和 Session机制详解

    原文地址:http://blog.csdn.net/fangaoxin/article/details/6952954     会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份. 本章将系统地讲述Cookie与Session机制,并比较说明什么时候不能用Cookie,什么时候不能用Session.1.1 Cookie机

【转 :Hibernate 缓存机制】

转自:http://www.cnblogs.com/wean/archive/2012/05/16/2502724.html Hibernate 缓存机制   一.why(为什么要用Hibernate缓存?) Hibernate是一个持久层框架,经常访问物理数据库. 为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能. 缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据.   二.what(Hibernate缓

cookie和session机制之间的区别与联系

cookie|session|区别|cookie|session     具体来说cookie机制采用的是在客户端保持状态的方案.它是在用户端的会话状态的存贮机制,他需要用户打开客户端的cookie支持.cookie的作用就是为了解决HTTP协议无状态的缺陷所作的努力. 而session机制采用的是一种在客户端与服务器之间保持状态的解决方案.同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的.而ses

PHP的SESSION机制分析

本篇文章主要介绍一下php session技术方面的文章. 1.session.save_handler = files 1. session_start() (1)session_start()是session机制的开始,它有一定概率开启垃圾回收,因为session是存放在文件中,PHP自身的垃圾回收是无效的,SESSION的回收是要删文件的,这个概率是根据php.ini的配置决定的,但是有的系统是 session.gc_probability = 0,这也就是说概率是0,而是通过cron脚本

正确理解cookie和session机制原理

 php中cookie和session是我们常用的两个变量了,一个是用户客户端的,一个用在服务器的但他们的区别与工作原理怎么样,下面我们一起来看看cookie和session机制原理吧.   cookie和session机制之间的区别和联系 具体来说cookie机制采用的是在客户端保持状态的方案.它是在用户端的会话状态的存贮机制,他需要用户打开客户端的cookie支持.cookie的作用就是为了解决HTTP协议无状态的缺陷所作的努力. 而session机制采用的是一种在客户端与服务器之间保持状态