gpt4 book ai didi

spring-data-neo4j - Spring Data Neo4j + Spring Data Rest : Using a Natural Key for all CRUD operations instead of the Neo4J node Id

转载 作者:行者123 更新时间:2023-12-02 04:50:51 24 4
gpt4 key购买 nike

我正在编写一个依赖于 Spring Data Rest 和 Spring Data Neo4J 的 Spring Restful 微服务。

我们不想在 JSON 响应的 HAL 链接中公开内部 Neo4J 节点标识符。原因是(据我所知)这些标识符在节点删除的情况下被 Neo4J 重用。如果是这种情况,这将给我们带来数据完整性问题。所以我们宁愿使用自然键,例如 UUID。 如果我关于重用 neo4J 节点 ID 的假设是错误的,请纠正我

我们想要实现的是对所有 CRUD 操作使用自然键而不是节点 ID(即:PUT http://localhost:8080/apiname/5448ae86-fe87-4daf-bfb5-985522a1cf14 和一些主体)。

我们的第一个方法是扩展 NodeGraphRepositoryImp 。例如。

protected Node getById(UUID id) {
Node node = (Node) this.findByPropertyValue("uuid_id", id);
return template.getNode(node.getId());
}

并通过在 Neo4J 配置中注入(inject)自定义的 Neo4jTemplate 来实例化它。

但是由于以下原因,这种方法不起作用:

1) 我无法在 NodeEntity 类中定义任何不同于用 @GraphId 注释的 idProperty。结果,Spring Data Rest 最终尝试将自然键(例如 UUID)分配给 neo4j 节点 ID 字段(即 Long)并且类型转换失败。

2) Spring Data Neo4J 似乎没有使用我们扩展 NodeGraphRepositoryImpl 的自定义类,而是使用原始未扩展的 NodeGraphRepositoryImpl 类。

也许这种做法是错误的。您能否推荐一种实现方法?

非常感谢您的帮助。

最佳答案

Spring Data Rest 引入了一个 BackendIdConverter 用于覆盖/自定义在 URI 中公开的字段。

请看DATAREST-155 ( https://jira.spring.io/plugins/servlet/mobile#issue/DATAREST-155 )

你能试试看吗?

您还可以查看以下线程:

How can you customise self, parent, children links in spring data rest with neo4j

关于spring-data-neo4j - Spring Data Neo4j + Spring Data Rest : Using a Natural Key for all CRUD operations instead of the Neo4J node Id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28565995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com