本文介绍了Spring Data JPA 事务 - 没有正在进行的事务 - Spring Data Neo4j的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想我遗漏了一些明显的东西.我试图通过 JUnit 测试用例将实体持久化到数据库中,但由于没有活动事务,它似乎没有持久化.

I think i'm missing something obvious. Iam trying to make a entity persist into a database via a JUnit Test case, however it doesnt seem to be persisting due to no active transaction.

配置:

 @Configuration
    @EnableTransactionManagement
       public class TransactionConfig {

    @Inject
    private EntityManagerFactory entityMangerFactory;

    @Bean
    public JpaTransactionManager transactionManager(){
        return new JpaTransactionManager(entityMangerFactory);
    }

测试用例:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = { Application.class })
@ActiveProfiles(CommonConstants.SPRING_PROFILE_TEST)
@IntegrationTest
@WebAppConfiguration
public class UserRepositoryTest {

    @Inject
    UserRepository userRepo;

    @Test
    @Rollback(false)
    @Transactional("transactionManager")
    public void addUser() {
        User user = BootstrapDataPopulator.getUser();
        userRepo.save(user);
        System.out.println(user.getId()); //Successfully outputs the id generate by hibernate
        assertNotNull(user.getId());
    }
}

^这个测试用例成功执行,但是我没有看到任何实体按预期保留在数据库中.

^This test case executed successfully however I do not see any entiites persisted in the database as expected.

当我将 userRepo.save(user) 更改为 userRepo.saveAndFlush(user) 时,出现以下异常:

When I change the from userRepo.save(user) to userRepo.saveAndFlush(user) I get the following exception:

javax.persistence.TransactionRequiredException: no transaction is in progress
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.checkTransactionNeeded(AbstractEntityManagerImpl.java:1171)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:1332)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

Spring Boot 自动配置报告:http://dumptext.com/YcGaR3Wf

已初始化的所有 Spring Bean 的名称:http://dumptext.com/jp9O6l8v

推荐答案

我也在我的应用程序中使用 Spring Data Neo4j (SDN).SDN 带有一个默认类 Neo4jConfiguration,它具有:

I am using Spring Data Neo4j (SDN) in my application as well. SDN comes with a default class Neo4jConfiguration which has:

@Bean(name = {"neo4jTransactionManager","transactionManager"})
@Qualifier("neo4jTransactionManager")
public PlatformTransactionManager neo4jTransactionManager() throws Exception {
    return new JtaTransactionManagerFactoryBean(getGraphDatabaseService()).getObject();
}

transactionManager"覆盖在我的 TransactionConfig 类中定义的 bean.因此,没有进行实体交易的原因.我停止使用 SDN 类 Neo4jConfiguration.这解决了我的问题.

The "transactionManager" overrides the bean defined in my TransactionConfig class. Hence the reason no Entity transaction was in progress. I stopped using the SDN class Neo4jConfiguration. This resolved my issue.

这篇关于Spring Data JPA 事务 - 没有正在进行的事务 - Spring Data Neo4j的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-04 06:54
查看更多