У меня есть метод службы, который вызывает метод 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>
Вы можете разместить свой класс обслуживания и расскажите нам, как /, откуда вы звоните его? – niekname
Две вещи, которые достали меня раньше: 1) Убедитесь, что вы импортируете правую аннотацию @Transactional (то, что из 'org.springframework') и 2) Убедитесь, что вы сканируете компонентное сканирование для сканирования пакетов, которые ваш @Service находится в – rpmartz