【发布时间】:2015-04-18 09:56:22
【问题描述】:
我正在编写一个依赖 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 配置中注入自定义的 Neo4jTemplate 来实例化它。
但是,由于以下原因,这种方法不起作用:
1) 我不能定义任何其他 idProperty 与 NodeEntity 类中用 @GraphId 注释的不同。结果,Spring Data Rest 最终尝试将自然键(例如 UUID)分配给 neo4j 节点 id 字段(即 Long)并且类型转换失败。
2) Spring Data Neo4J 似乎没有使用我们扩展 NodeGraphRepositoryImpl 的自定义类,而是使用原始的未扩展 NodeGraphRepositoryImpl 类。
也许这种方法是错误的。你能推荐一种实现它的方法吗?
非常感谢您的帮助。
【问题讨论】:
标签: spring-data-neo4j spring-data-rest