2012-02-08 13 views
7

SessionFactoryUtils.getSession yöntemine Spring 3.1.0'daki Hazırda Bekletme 4'ten ne oldu? Bunun yerine ne kullanılmalı?Spring: Neden Hibernate 4'teki SessionFactoryUtils sınıfı getSession yöntemini sağlamıyor?

org.hibernate.HibernateException: No Session found for current thread 
at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:97) 
at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:883) 

Herhangi ipucu: sessionFactory.getCurrentSession() bana bu istisna veren tutar?

+1

Aynı sorunla karşı karşıyayım, bunun yerine sessionFactory.getCurrentSession() yöntemini kullanıyorum, ancak gitmenin doğru yolu olup olmadığından emin değilim. Marten sonrası – craftsman

cevap

0

Neden kaldırdıklarından emin değilsiniz, muhtemelen org.hibernate.context.CurrentSessionContext kullanarak daha iyi bir tasarım gerçekleştirdiler. this post itibaren:

... Basitçe düz SessionFactory kullanmak ve mevcut işlem oturumu ( openSession kullanmayın !!!!) elde etmek için getCurrentSession yöntemi kullanmak ve gitmek iyidir .. .

documentation of SessionFactory.getCurrentSession() itibaren: Eğer yapılandırmadığınızda

The definition of what exactly "current" means controlled by the CurrentSessionContext impl configured for use. 
+0

, anahtar kelime "geçerli * işlem * oturumu" dir. Bu yüzden, gastaldi benim cevabımda tarif ettiğim gibi işlemsel ayrımı ayarlamalı –

0

'org.hibernate.HibernateException: No Session found for current thread' istisna olur işlem demarcat Bahar ile uygun şekilde iyon.

Genellikle, işleminiz başladığında Spring sizin için bir oturum açar, bir ThreadLocal öğesine bağlar ve işleminizin süresi boyunca bunu yeniden kullanır. İşleminiz tamamlandığında, oturum kapanır (temizlendikten sonra). Yani, SessionFactory sınıfına herhangi bir çağrı yapmanız gerekmez.

Genellikle, insanlar bu sınıfta bir sınıfa (genellikle bir Servis) ve configure Spring to start and end transactions on method invocations'a @Transactional koydu.

0

Bir özellik örneği eklemek zorunda:

<prop key="hibernate.current_session_context_class">thread</prop>

oturumunuz fabrika fasulye haritalama için. Bu yokken

3

Kullanım sessionFactory.getCurrentSession()

(ayrıntılı bilgi için hazırda belgelerine bakın) Ben "geçerli oturum" kavramı hazırda 3 geldi inanıyoruz SessionFactoryUtil yazılmıştır.

İlgili konular