0

я получаю «нет Hibernate Session, связанный с резьбой, и конфигурация не позволяет создавать нетранзакционного один здесь» с Spring 3.2 с Hibernate 3.3Почему спящий режим вынуждает транзакцию

DAO класс:

@Repository 
public class ContactDAOImpl implements ContactDAO { 
    @Autowired 
    private SessionFactory sessionFactory; 
    public List<Contact> listContact() { 
     return sessionFactory.getCurrentSession().createQuery("from Contact").list(); 
    } 
...... 
    } 
} 

конфигурации Контекст:

<beans .....> 
    <context:annotation-config /> 
    <context:component-scan base-package="org.spring.*" /> 
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     ....... 
    </bean> 
<!-- Hibernate session factory --> 
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
     <property name="dataSource"> 
      <ref bean="dataSource"/> 
     </property> 
     <property name="annotatedClasses"> 
     <list> 
      <value>org.spring.entity.Contact</value> 
     </list> 
     </property> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.SybaseDialect</prop> 
       <prop key="hibernate.show_sql">false</prop> 
      </props> 
     </property> 
    </bean> 

Хотя я определил TransactionManager, я его нигде не использую.
Почему я получаю вышеуказанную ошибку - когда ни одно место в моем коде не использует или не определяет транзакции?
Почему я вынужден определить транзакцию?

+0

возможно дубликат [Нет Hibernate сессии, связанной с резьбой и конфигурация не позволяет создание нетранзакционного один здесь] (http://stackoverflow.com/questions/3289979/no-hibernate-session-bound -в-нить-и-конфигурация-делает-не-разрешительный-создание) – chrylis

ответ

0

Как вы называете свой метод DAO? его нужно вызывать внутри транзакции, в идеале от уровня обслуживания, тогда услуга может быть вызвана, например, контроллером. Обратите внимание на аннотацию @Transactional в методе класса обслуживания.

@Service 
public class ContactServiceImpl implements ContactService { 
    @Autowired 
    private ContactDAO contactDAO; 

    @Transactional 
    public List<Contact> listContact() { 
     return contactDAO.listContact(); 
    } 
} 
Смежные вопросы