@PostConstruct и исключение «Нет привязки Hibernate к потоку» - PullRequest
3 голосов
/ 12 апреля 2011

Мне нужно сделать кое-что из базы данных в моем репозитории '@PostConstruct:

@Repository
public class SomeRepositoryHibernate implements SomeRepository {
    private SessionFactory sessionFactory;

    @Autowired
    public SomeRepositoryHibernate(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    ...

    @PostConstruct
    public void doSomestuffWithDb() {
        ...
    }

}

, но это не с:

org.hibernate.HibernateException: No Hibernate Session bound to thread, and 
   configuration does not allow creation of non-transactional one here

Есть ли какое-нибудь простое решение для этого?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 24 сентября 2011

при условии, что вы используете hibernate-комбинацию с spring и правильно настроили sessionFactory и менеджер транзакций в своем файле конфигурации spring.Тогда основная причина заключается в том, что при вызове метода doSomestuffWithDb () работа по подготовке транзакции не была завершена к весне.@Postconstruct может гарантировать, что метод вызывается только после создания компонента, он не может гарантировать, что контейнер готов ко всему - здесь, я имею в виду материал, связанный с транзакциями - на данный момент.Подробное обсуждение на весеннем форуме.http://forum.springsource.org/showthread.php?58337-No-transaction-in-transactional-service-called-from-PostConstruct Кроме того, автор представил свое решение jira на https://jira.springsource.org/browse/SPR-5966?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel#issue-tabs

2 голосов
/ 12 апреля 2011
  • У вас нет запущенной транзакции в @PostConstruct
  • вы не можете использовать @Transactional там (кроме mode="aspectj"), поэтому Spring не может начать транзакцию
  • транзакция требуется для гибернации, чтобы изменить данные (вставить / обновить / удалить)

Итак, вам придется создать сеанс из фабрики сеансов (через .openSession()) и запустить транзакцию вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...