2016-07-15 2 views
0

Я пытаюсь autwired hibernate session factory в методе запуска потока. Но он показывает следующее сообщение об ошибкеAutowiring sessionfactory внутри потока запустить метод не работает

Exception in thread "Timer-6" org.hibernate.HibernateException: No Session found for current thread

мой класс выглядит следующим образом

public class CroneJobNew extends TimerTask { 
@autowired 
private SessionFactory sessionFactory ; 


@Override 
public void run() { 
List<Shop> shops = sessionFactory.getCurrentSession().createCriteria(Shop.class).list(); 
System.out.println("shops size" + shops.size()); 

} 


} 

Как SLOVE это?

+0

Есть ли какая-либо конкретная причина, почему вы не используете аннотации @ @ EnableAsync и '@ Async' для обработки потоков? Autowiring с этими аннотациями на месте работает как шарм. –

+0

Я использую эту тему для создания таймера. Мой класс CroneJobNew реализует этот класс потоков по умолчанию. – Jerin

+0

просто посмотрите этот ответ, [Весна и спящий режим: сеанс не найден для текущего потока] (http://stackoverflow.com/questions/10298483/spring-and-hibernate-no-session-found-for-current-thread), Я думаю, что это поможет. –

ответ

0

Вы можете заменить метод getCurrentSession() к openSession(), а также вам нужно добавить session.beginTransaction() (наконец-то закрыть его), потому что вы работаете без @Transactional сферы

+0

Я использую несколько sessionFactory.openSession() в моем методе запуска. Поэтому, когда я закрываю фабрику сеансов с sessionFactory.close(); он показывает следующую ошибку: Исключение в потоке «Timer-0» org.hibernate.service.UnknownServiceException: Неизвестная запрашиваемая услуга – Jerin

0

Убедитесь, что ваш класс Аннотированный с @Component для пружинной зависимости Инъекция.

Refer this doc for Configuring Session Factory Bean

Если вы работаете с пружинной загрузкой, вам придется вручную настроить SessionFactory Bean, чтобы заставить его работать.