SDN 升级到 4.2.0.BUILD-SNAPSHOT 后如何获取当前的 neo4j 会话?
How to get current neo4j session after SDN upgrade to 4.2.0.BUILD-SNAPSHOT?
将 Spring Data Neo4j 更新为 4.2.0.BUILD-SNAPSHOT
后出现了一些困难。特别是,我需要获取当前 Session
实例来执行一些自定义查询。我一直在使用
private Neo4jOperations getNeo4jOperations() {
return applicationContext.getBean(Neo4jOperations.class);
}
但 Neo4jOperations
现在已弃用,所以我尝试了
private Session Neo4jSession() {
return applicationContext.getBean(SessionFactory.class).openSession();
}
但出现异常:
org.neo4j.ogm.exception.TransactionManagerException: Transaction is not current for this thread
org.neo4j.ogm.session.transaction.DefaultTransactionManager.rollback(DefaultTransactionManager.java:93)
org.neo4j.ogm.transaction.AbstractTransaction.rollback(AbstractTransaction.java:67)
org.neo4j.ogm.drivers.bolt.transaction.BoltTransaction.rollback(BoltTransaction.java:64)
org.neo4j.ogm.transaction.AbstractTransaction.close(AbstractTransaction.java:141)
org.springframework.data.neo4j.transaction.Neo4jTransactionManager.doCleanupAfterCompletion(Neo4jTransactionManager.java:311)
org.springframework.transaction.support.AbstractPlatformTransactionManager.cleanupAfterCompletion(AbstractPlatformTransactionManager.java:1016)
org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:811)
org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:730)
org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:487)
org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:291)
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
com.sun.proxy.$Proxy110.delete(Unknown Source)
那么如何获取当前会话实例呢?
你能试试这个吗?
请注意,此配置使用的是 spring-data-neo4j 4.2.0.M1
版本,但我认为它也适用于 4.2.0.BUILD-SNAPSHOT
@Bean
public SessionFactory getSessionFactory() {
return new SessionFactory(getConfiguration(), "com.yourbasepackage") {
};
}
@Bean
@Scope(value = "prototype", proxyMode = ScopedProxyMode.TARGET_CLASS)
public Session getSession() throws Exception {
return getSessionFactory().openSession();
}
同时注释您的配置 class 为:
@EnableTransactionManagement
然后你可以注入session
bean并随意使用它:
@Inject
Session session;
可以看到升级到SDN 4.2完整指南here。
NOTE: Due to another issue, I've recently created a sample project on
github configured correctly with this version of
spring-data-neo4j
. I think it could help you as a configuration
sample.
希望对您有所帮助
将 Spring Data Neo4j 更新为 4.2.0.BUILD-SNAPSHOT
后出现了一些困难。特别是,我需要获取当前 Session
实例来执行一些自定义查询。我一直在使用
private Neo4jOperations getNeo4jOperations() {
return applicationContext.getBean(Neo4jOperations.class);
}
但 Neo4jOperations
现在已弃用,所以我尝试了
private Session Neo4jSession() {
return applicationContext.getBean(SessionFactory.class).openSession();
}
但出现异常:
org.neo4j.ogm.exception.TransactionManagerException: Transaction is not current for this thread
org.neo4j.ogm.session.transaction.DefaultTransactionManager.rollback(DefaultTransactionManager.java:93)
org.neo4j.ogm.transaction.AbstractTransaction.rollback(AbstractTransaction.java:67)
org.neo4j.ogm.drivers.bolt.transaction.BoltTransaction.rollback(BoltTransaction.java:64)
org.neo4j.ogm.transaction.AbstractTransaction.close(AbstractTransaction.java:141)
org.springframework.data.neo4j.transaction.Neo4jTransactionManager.doCleanupAfterCompletion(Neo4jTransactionManager.java:311)
org.springframework.transaction.support.AbstractPlatformTransactionManager.cleanupAfterCompletion(AbstractPlatformTransactionManager.java:1016)
org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:811)
org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:730)
org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:487)
org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:291)
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
com.sun.proxy.$Proxy110.delete(Unknown Source)
那么如何获取当前会话实例呢?
你能试试这个吗?
请注意,此配置使用的是 spring-data-neo4j 4.2.0.M1
版本,但我认为它也适用于 4.2.0.BUILD-SNAPSHOT
@Bean
public SessionFactory getSessionFactory() {
return new SessionFactory(getConfiguration(), "com.yourbasepackage") {
};
}
@Bean
@Scope(value = "prototype", proxyMode = ScopedProxyMode.TARGET_CLASS)
public Session getSession() throws Exception {
return getSessionFactory().openSession();
}
同时注释您的配置 class 为:
@EnableTransactionManagement
然后你可以注入session
bean并随意使用它:
@Inject
Session session;
可以看到升级到SDN 4.2完整指南here。
NOTE: Due to another issue, I've recently created a sample project on github configured correctly with this version of
spring-data-neo4j
. I think it could help you as a configuration sample.
希望对您有所帮助