2016-05-06 1 views
0

У меня есть метод службы, который вызывает метод DAO. Метод обслуживания аннотируется как @Transactional, метод DAO - нет. Во время выполнения следующее сообщение об ошибке:@Transactional работает только в DAO, а не в сервисе (нет сеанса Hibernate, связанного с потоком)

No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here 

Когда я делаю метод DAO @Transactional, а также, она отлично работает.

Как исправить это, не касаясь DAO? (Большинство методов в супер-класса DAO, которые не имеют доступа к.)

Я использую hibernate-core-3.6.8 и spring-orm-4.1.6.RELEASE

В Daos прокомментированы в @Repository, услуги как @Service

Моя applicationContext.xml выглядит следующим образом (я только при условии, что важные части - дайте мне знать, если вам нужно больше):

<bean id="contextApplicationContextProvider" class="at.spardat.deploysolution.process.context.ApplicationContextProvider"/> 

    <tx:annotation-driven/> 

    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/> 

    <util:properties id="hibernateProperties" location="classpath:hibernate.properties"/> 

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" 
     p:dataSource-ref="dataSource" p:hibernateProperties-ref="hibernateProperties"> 
     <qualifier value="default"/> 
     <property name="mappingLocations"> 
      <list> 
       <value>classpath:....hbm.xml</value> 
      </list> 
     </property> 
     <property name="lobHandler" ref="defaultLobHandler"/> 
    </bean> 

    <bean id="defaultLobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" lazy-init="true"/> 

    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" 
     p:sessionFactory-ref="sessionFactory"/> 

    <bean id="dataFieldMaxValueIncrementer" class="org.springframework.jdbc.support.incrementer.MySQLMaxValueIncrementer" 
     p:dataSource-ref="dataSource" p:incrementerName="TB_OID_SEQUENCE" p:columnName="OID_VALUE"> 
     <qualifier value="default"/> 
</bean> 
+0

Вы можете разместить свой класс обслуживания и расскажите нам, как /, откуда вы звоните его? – niekname

+0

Две вещи, которые достали меня раньше: 1) Убедитесь, что вы импортируете правую аннотацию @Transactional (то, что из 'org.springframework') и 2) Убедитесь, что вы сканируете компонентное сканирование для сканирования пакетов, которые ваш @Service находится в – rpmartz

ответ

0

вы можете изменить

hibernate.current_session_context_class = нить

в свойствах Hibernate файл

Благодаря

Смежные вопросы