Spring数据Neo4j受影响的行数

时间:2016-09-09 16:15:40

标签: spring-boot neo4j spring-data-neo4j-4

考虑到Spring Boot,带有Spring-Data-neo4j-4的neo4j环境我想删除它并在删除失败时收到错误消息。

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

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

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

@Spy

在上面的代码中,我查询数据库以在删除它之前检查该值是否存在。 第二个问题:你推荐任何不同的方法吗?

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

再看上面的代码:

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));
}

在调试中意味着:

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

所以如果复制没有在db2中插入该代码,则此代码将抛出异常。 第二个问题是:如果没有更改这些套接字,我有什么方法可以删除并给出正确的响应吗?

1 个答案:

答案 0 :(得分:1)

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!
}