Какова корреляция между аннотацией Spring org.springframework.transaction.annotation.Transactional
и методом Neo4j OGM org.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)
Что я делаю не так ? Почему транзакция исчезает?