Spring 数据 JPA 事务 - 没有正在进行的事务 - Spring 数据 Neo4j
Spring Data JPA Transaction - No Transaction in progress - Spring Data Neo4j
我想我遗漏了一些明显的东西。我正在尝试通过 JUnit 测试用例使实体持久保存到数据库中,但是由于没有活动事务,它似乎没有持久存在。
配置:
@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());
}
}
^此测试用例执行成功,但我没有看到任何实体如预期的那样保留在数据库中。
当我将 userRepo.save(user) 更改为 userRepo.saveAndFlush(user) 时,出现以下异常:
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 启动自动配置报告:http://dumptext.com/YcGaR3Wf
所有 Spring Beans 初始化的名称:http://dumptext.com/jp9O6l8v
我也在我的应用程序中使用 Spring Data Neo4j (SDN)。 SDN 带有默认的 class Neo4jConfiguration,它具有:
@Bean(name = {"neo4jTransactionManager","transactionManager"})
@Qualifier("neo4jTransactionManager")
public PlatformTransactionManager neo4jTransactionManager() throws Exception {
return new JtaTransactionManagerFactoryBean(getGraphDatabaseService()).getObject();
}
"transactionManager" 覆盖了我的 TransactionConfig class 中定义的 bean。因此,没有实体交易正在进行的原因。我停止使用 SDN class Neo4jConfiguration。这解决了我的问题。
我想我遗漏了一些明显的东西。我正在尝试通过 JUnit 测试用例使实体持久保存到数据库中,但是由于没有活动事务,它似乎没有持久存在。
配置:
@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());
}
}
^此测试用例执行成功,但我没有看到任何实体如预期的那样保留在数据库中。
当我将 userRepo.save(user) 更改为 userRepo.saveAndFlush(user) 时,出现以下异常:
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 启动自动配置报告:http://dumptext.com/YcGaR3Wf
所有 Spring Beans 初始化的名称:http://dumptext.com/jp9O6l8v
我也在我的应用程序中使用 Spring Data Neo4j (SDN)。 SDN 带有默认的 class Neo4jConfiguration,它具有:
@Bean(name = {"neo4jTransactionManager","transactionManager"})
@Qualifier("neo4jTransactionManager")
public PlatformTransactionManager neo4jTransactionManager() throws Exception {
return new JtaTransactionManagerFactoryBean(getGraphDatabaseService()).getObject();
}
"transactionManager" 覆盖了我的 TransactionConfig class 中定义的 bean。因此,没有实体交易正在进行的原因。我停止使用 SDN class Neo4jConfiguration。这解决了我的问题。