java 线程 session_session与多线程

我的一个wpf项目里使用了nhibernate,实体启用了延时加载,DAL里使用的单例模式,基本上以这篇文章为例:

在测试的时候发现了,在多线程时会有问题,后来发现有人提出在BLL里使用session.merge()方法来解决,如:

session.Save(session.Merge(entity));

但是这样后又出现了有些ComboBox绑定不显示的问题,在debug时发现实体的值能读取出来,ComboBox的ItemSource也正常,下拉列表也有值,但就是不显示。若不使用session.merge()则正常。

经过网上搜索,现在我想使用spring.net来管理session,发现有两种使用方法。

一种是使用spring.net的HibernateTemplate,像这样:

publicclassUserDao : HibernateDaoSupport

{publicUserDao()

{

}publicboolSaveObject(User user)

{

HibernateTemplate.Save(user);returntrue;

}publicboolDeleteObject(User user)

{

HibernateTemplate.Delete(user);returntrue;

}publicboolUpdateObject(User user)

{

HibernateTemplate.Update(user);returntrue;

}publicIList GetAllObjectsList()

{returnHibernateTemplate.LoadAll(typeof(User));

}publicUser Load(Object ID)

{return(User)HibernateTemplate.Load(typeof(User),ID);

}

}

另一种是spring.net下载包的Spring.Data.NHibernate.Northwind例子,就像下面这样:

publicabstractclassHibernateDao

{privateISessionFactory sessionFactory;publicISessionFactory SessionFactory

{protectedget{returnsessionFactory; }set{ sessionFactory=value; }

}protectedISession CurrentSession

{get{returnsessionFactory.GetCurrentSession(); }

}protectedIListGetAll()whereT :class{

ICriteria criteria=CurrentSession.CreateCriteria();returncriteria.List();

}

}publicinterfaceIDao{

TEntity Get(TId id);

IListGetAll();

}publicinterfaceISupportsDeleteDao{voidDelete(TEntity entity);

}publicinterfaceISupportsSave{

TId Save(TEntity entity);voidUpdate(TEntity entity);

}

我更倾向于使用第一种方式,这可以让我少改些代码。但我不知道上面两种方式是否可以解决多线程的问题,为了少走弯路,特意在此发帖求助,希望有经验的朋友指点。谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值