Hibernate取Session需要用单例吗?

herowzz 08-05-23

我用eclipse自动生成的代码看里面的HibernateSessionFactory里取session用的是单例模式。
hibernate取session需要用单例吗?
难道没有取两个不同的session的需求吗?
请问各位朋友在各自的项目里也是用的单例取的session吗?
如果是单例的话那什么时候关闭session呢?

b612
2008-05-26 15:46

由于最近刚接触Hibernate,作为同病相怜的人,在这里友情赞助你一下;顺便说一点我的想法,
首先说明一点:对于Hibernate当Session加载了持久化对象后,会为这个对象的值类型的属性赋值一份快照。当Session清理缓存时,通过比较这个对象的当前属性与它的快照,Session能够判断这个对象的哪些属性发生了变化。

然后开始正文:我的理解,这个Session对象必须是单例的,这样所有的用户才能共享同一个Session缓存,举例说明:当其中一个用户A获取了apple对象的信息后,存入缓存;这时用户B修改了apple对象的信息,并存入缓存,由于A和B用户访问的是同一个缓存,所以避免了并发的问题;

以上只是我的初学观点,希望大家指正;谢谢

herowzz
2008-05-29 22:19

我不知道是因为这个论坛的太冷清了还是我的问题太简单已至于没人愿意回答

这个问题我已经在csdn上得到解决了
http://topic.csdn.net/u/20080523/22/af200c31-2e38-4246-b1ac-1c3f7ae0a74a.html

你可以参看。。。

banq
2008-05-30 11:02

你的帖子其实已经触犯Jdon的两个立场:
1. 反对MyEclipse, 反对使用它的自动代码生成,因为它的逻辑是:数据库是妈妈;实体代码是孩子;按照OO概念,正好应该相反,否则误用Hibernate;

2. 反对单例,实战中不要有单例概念,单例是反模式的,单例是邪恶的,这个已经在本站讨论,所以,不可能有绝对的单例,只有相对的单例。

Session相当于connection,如果你想单例也可以,共用一个数据库连接,那么多线程多用户系统变成单用户。