Spring-Data JPA: InvalidDataAccessApiUsageException для @TransactionalJAVA

Программисты JAVA общаются здесь
Ответить
Гость
 Spring-Data JPA: InvalidDataAccessApiUsageException для @Transactional

Сообщение Гость »


I run a Spring Boot Application wiht @EnableTransactionManagement and want to use @Transactional(readOnly = true) for some database queries.

But I receive a confusing error message. I'm using Spring, Spring Boot and and Spring Data JPA.

MySpringBootApplication.java

@SpringBootApplication @EnableTransactionManagement @ComponentScan("com.deutscheboerse.regrephub") @EntityScan(basePackages = "com.deutscheboerse.regrephub") @EnableJpaRepositories(basePackages = "com.deutscheboerse.regrephub") @Slf4j public class MySpringBootApplication { ... Some @Autowired variables ... public static void main(String[] args) { SpringApplication.run(MySpringBootApplication.class, args); } ... } MySpringBootApplicationConfiguration.java

@Configuration @EnableEncryptableProperties @EnableTransactionManagement @EnableAsync @Slf4j public class MySpringBootApplicationConfiguration { ... Some @Autowired variables ... @Bean @ConfigurationProperties(prefix = "spring.datasource") public DataSource dataSource() { return DataSourceBuilder .create(this.dataSourceProperties.getClassLoader()) .url(this.dataSourceProperties.getUrl()) .username(this.dataSourceProperties.getUsername()) .password(this.dataSourceProperties.getPassword()) .build(); } ... } MyBeanDao.java

@Repository public interface MyBeanDao extends JpaRepository { @QueryHints(value = @QueryHint(name = HINT_FETCH_SIZE, value = "" + Integer.MIN_VALUE)) @Query(value = "SELECT * FROM MY_TABLE", nativeQuery = true) @Transactional(readOnly = true) Stream streamAll(); } MyBeanService.java

@Service @Slf4j public class MyBeanService extends AbstractService { @Autowired public MyBeanService(...) { ... } @Override @Transactional(readOnly = true, propagation = Propagation.SUPPORTS) public void handleRequest(Object request, Message msg) { try (Stream data = myBeanDao.streamAll()) { ... } catch (Exception e) { ... } } } When I run my SpringBootApplication I will receive the following log messages / errors:

[TransactionInterceptor:474] Getting transaction for [org.springframework.data.jpa.repository.support.SimpleJpaRepository.streamAll] [TransactionInterceptor:517] Completing transaction for [org.springframework.data.jpa.repository.support.SimpleJpaRepository.streamAll] after exception: org.springframework.dao.InvalidDataAccessApiUsageException: You're trying to execute a streaming query method without a surrounding transaction that keeps the connection open so that the Stream can actually be consumed. Make sure the code consuming the stream uses @Transactional or any other way of declaring a (read-only) transaction. [RuleBasedTransactionAttribute:131] Applying rules to determine whether transaction should rollback on org.springframework.dao.InvalidDataAccessApiUsageException: You're trying to execute a streaming query method without a surrounding transaction that keeps the connection open so that the Stream can actually be consumed. Make sure the code consuming the stream uses @Transactional or any other way of declaring a (read-only) transaction. [RuleBasedTransactionAttribute:148] Winning rollback rule is: null [RuleBasedTransactionAttribute:153] No relevant rollback rule found: applying default rules First JPA opens a transaction and close it immediately with an exception, that I want to execute a streaming query method without a surrounding transaction. Does someone had this before?!


Источник: https://stackoverflow.com/questions/483 ... nsactional
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»