我目前正在开发一个从文件中读取大量数据的应用程序。要插入db中的一批对象的通常大小约为40.000个对象。到目前为止,我们已经使用Spring.Net和NHibernate进行开发,我希望尽可能保持一致,并使用相同的技术进行批量插入。我有NHibernate的经验,我知道使用无状态会话是可能的。
有没有办法使用Springs.Net事务和会话管理但使用NHibernate无状态会话?使用有状态会话不是一个具有如此大量对象的选项,我真的想使用NHibernate而不是Spring.Net ADO
答案 0 :(得分:3)
您可以构建自己的HibernateTransactionManager
,以创建两种类型的会话。这几乎没有开销,因为Sessions的创建成本很低。
从Spring.NET源代码树中获取该类的副本。当它为常规ISession执行此操作时,它是否打开并关闭IStatelessSession。将您的IStatelessSession放入Spring.Threading.HybridContextStorage
以便于访问。
然后在需要IStatelessSession的类上创建方法或扩展方法GetStatelessSession。
或者,如果您使用的是SQL Server,使用SqlBulkCopy
可能会更好。
答案 1 :(得分:2)
您可以在会话工厂中使用OpenStatelessSession
方法。
public class Foo : HibernateDaoSupport
{
public void Bar()
{
using (var session = SessionFactory.OpenStatelessSession())
{
// do something with the stateless session
}
}
}
答案 2 :(得分:0)
事务在ISession和IStatelessSession中以相同的方式工作。我不知道Spring.Net是做什么来支持NHibernate的,但是如果IStatelessSession还没有被支持那么它应该不难实现。
答案 3 :(得分:0)