【发布时间】:2016-07-12 20:52:43
【问题描述】:
Springorg.springframework.transaction.annotation.Transactional注解和Neo4j OGMorg.neo4j.ogm.session.Session.getTransaction()方法有什么关系。
我正在尝试通过 session.getTransaction() 在使用 Spring @Transactional 注释的方法内部访问当前事务,但始终为 null。
我在 Spring MVC RestController 方法中添加了以下代码:
Transaction tx = session.beginTransaction();
try {
for (int i = 0; i < 10; i++) {
initializeNode(node);
}
}
tx.commit();
} catch (Throwable th) {
logger.error("Error while inserting mock data", th);
th.printStackTrace();
} finally {
tx.close();
}
如果是以下方法:
private void initializeNode(TestNode node) {
System.out.println(session.getTransaction());
}
它会打印当前的 tx - 到目前为止一切正常。
但如果是以下方法:
private void initializeNode(TestNode node) {
System.out.println(session.getTransaction());
User admin = userDao.findByUsername("admin");
}
第一次打印当前 tx 然后为 null...事务在提交之前由于某种原因消失了..
这是findByUsername 方法:
@Service
@Transactional
public class UserDaoImpl implements UserDao {
@Override
@Transactional(readOnly = true)
public User findByUsername(String username) {
return userRepository.findByUsername(username);
}
...
}
在提交之后,我收到以下异常:
org.neo4j.ogm.exception.TransactionManagerException: Transaction is not current for this thread
at org.neo4j.ogm.session.transaction.DefaultTransactionManager.commit(DefaultTransactionManager.java:100)
at org.neo4j.ogm.transaction.AbstractTransaction.commit(AbstractTransaction.java:83)
at org.neo4j.ogm.drivers.embedded.transaction.EmbeddedTransaction.commit(EmbeddedTransaction.java:77)
我做错了什么?为什么交易会消失?
【问题讨论】:
标签: neo4j spring-data-neo4j spring-transactions spring-data-neo4j-4 neo4j-ogm