Spring数据Neo4j受影响的行数

考虑一个Spring Boot,neo4j环境与Spring-Data-neo4j-4我想做一个删除,并得到一个错误信息,当它删除失败。

我的问题是因为Repository.delete()返回void我没有ideia如果删除修改任何东西或不。

第一个问题:有没有办法得到最后一个查询受影响的行? 例如在plsql中,我可以执行SQL%ROWCOUNT

所以无论如何,我尝试了下面的代码:

public void deletesomething(Long somethingId) { somethingRepository.delete(getExistingsomething(somethingId).getId()); } private something getExistingsomething(Long somethingId, int depth) { return Optional.ofNullable(somethingRepository.findOne(somethingId, depth)) .orElseThrow(() -> new somethingNotFoundException(somethingId)); } 

在上面的代码中,我查询数据库来检查值是否存在,然后删除它。 第二个问题:你推荐什么不同的方法?

所以现在,只是为了增加一些复杂性,我有一个集群数据库,db1只能创建,更新和删除,而db2和db3只能读取(这是由集群套接字保证的)。 db2和db3将从复制过程中接收来自db1的数据。 对于我目前看到的复制可能需要长达90秒,这意味着高达90年代的数据库将有不同的状态。

再看看上面的代码:

 public void deletesomething(Long somethingId) { somethingRepository.delete(getExistingsomething(somethingId).getId()); } 

在调试中意味着:

 getExistingsomething(somethingId).getId() // will hit db2 somethingRepository.delete(...) // will hit db1 

所以如果复制没有在db2中插入这个值,这个代码将会抛出异常。 第二个问题是:不改变这些套接字是否有任何方法可以删除并给出正确的响应?

Spring Data Neo4j目前不支持这个功能,如果你希望请打开一个功能请求。

与此同时,也许最简单的工作就是降到OGM的抽象层次。

  • 创建一个注入org.neo4j.ogm.session.Session
  • Session上使用以下方法

例如:( 例如Kotlin在手边)

 fun deleteProfilesByColor(color : String) { var query = """ MATCH (n:Profile {color: {color}}) DETACH DELETE n; """ val params = mutableMapOf( "color" to color ) val result = session.query(query, params) val statistics = result.queryStatistics() //Use these! }