2015-07-01 4 views
2

Загружает ли весна автоматически добавление аннотации @Transactional на уровне контроллера? Я попытался поставить @Transactional на уровень сервиса, но кажется, что уровень контроллера перекрывает аннотацию.Весенний ботинок @Transactional

У меня есть этот конфиг

<tx:advice id="txAdvice" transaction-manager="transactionManager"> 
    <tx:attributes> 
     <tx:method name="find*" read-only="true" isolation="READ_COMMITTED" 
      propagation="NOT_SUPPORTED" /> 
     <tx:method name="load*" read-only="true" isolation="READ_COMMITTED" 
      propagation="NOT_SUPPORTED" /> 
     <tx:method name="get*" read-only="true" isolation="READ_COMMITTED" 
      propagation="NOT_SUPPORTED" /> 
     <tx:method name="*" timeout="30" propagation="REQUIRED" /> 
    </tx:attributes> 
</tx:advice> 

<aop:config proxy-target-class="true"> 
    <aop:advisor advice-ref="txAdvice" 
     pointcut="execution(* *..service.*Service*.*(..))" order="1" /> 
</aop:config> 

и даже если я удалю, что конфиг сделки по-прежнему работает.

EDIT:

вот мой источник данных конфигурации

<bean id="msDataSource" class="org.apache.tomcat.jdbc.pool.DataSource" 
    destroy-method="close"> 
    <property name="driverClassName" value="${jdbc.main.driverClass}" /> 
    <property name="url" value="${jdbc.main.url}" /> 
    <property name="username" value="${jdbc.main.username}" /> 
    <property name="password" value="${jdbc.main.password}" /> 

</bean> 


<bean id="msPUM" 
    class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager"> 
    <property name="defaultDataSource" ref="msDataSource" /> 
</bean> 

<bean id="entityManagerFactory" 
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="persistenceUnitManager" ref="msPUM" /> 
    <!--<property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
     <property name="database" value="ORACLE"/> <property name="generateDdl" value="false"/> 
     <property name="showSql" value="true" /> </bean> </property> --> 
</bean> 

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
</bean> 
+0

Что заставляет вас чувствовать себя, как это? – Arpit

+0

Можете ли вы показать это? – Arpit

+0

Я отредактировал вопрос. –

ответ

4

Я просто предполагаю, но я предполагаю, что вы пытаетесь спросить здесь, почему вы в состоянии загрузить ленивые коллекции ваших лиц внутри вашего контроллера?

Spring Boot настраивает следующее свойство приложения spring.jpa.open-in-view со значением по умолчанию «true». В основном это открывает сеанс для всего запроса, позволяющий делать такие вещи, как выше, вне @Transactional.

Добавление этого к вашему application.properties выключит его:

spring.jpa.open-в поле зрения = ложь

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