当前位置: 首页 > 知识库问答 >
问题:

Spring数据Neo4j节点NotfoundException

萧宣
2023-03-14

我正在使用Neo4j的最新Spring数据。在这个项目中,我有不同的组,它们可以通过url/group/{id}/project访问,该url/group/{id}/project应该返回用户有权访问的所有项目的列表。这东西工作得很好,但是如果用户输入了一个很大的数字作为groupId,而这个数字在数据库中并不存在,我会得到一个

组织。neo4j。图b。NotFoundException:未找到节点400

我的问题看起来像

@Query("START a=node({userId}), b=node({groupId}) match a-[:user_belongs_to]-b return b")
GroupEntity getGroup(@Param("userId") Long userId, @Param("groupId") Long groupId);

即使我使用GraphRespository接口中的findOne()方法,我也会遇到这个异常。

那么,有没有可能告诉SDN而不是抛出返回null的异常?还是我必须捕获所有可能的运行时异常?

我想自己抛出异常,即NoSuchGroup、NoSuchUser。。

我使用的是SDN 3.3.0。释放。

非常感谢。

共有1个答案

吕亮
2023-03-14

如果找不到节点,则会出现这种情况。

不应为此使用Neo4j节点id,而应使用在创建组时创建管理的自定义id。

例如

@NodeEntity
class Group {

   @GraphId Long id;
   @Indexed int groupId;

   @RelatedTo(type="user_belongs_to",direction=INCOMING)
   Set<User> users;

}

interface GroupRepository extends GraphRepository<Group> {
   @Query("match (a:User)-[:user_belongs_to]-(b:Group) where a.userId = {userId} and b.groupId={groupId} return b")
   GroupEntity getGroup(@Param("userId") Long userId, @Param("groupId") Long groupId);

   // generated finder method
   GroupEntity findByGroupIdAndUsersUserId(@Param("groupId") Long groupId, @Param("userId") Long userId);
}
 类似资料:
  • 我使用的是Spring数据Neo4j 3.3。1.2与Neo4j服务器一起发布。3. 我的问题是有一些节点是我的实体的副本,但它只有索引属性。 我的班级看起来像这样 当一个新节点被创建时,我首先检查是否有一个现有的节点,如果它存在就更新它,否则创建一个新的节点。 存储库接口。 在Neo4j中,实体被创建到具有所有属性的节点。但是有些节点也有一个只包含productId的重复节点。问题是这并没有发生

  • 在SpringDataNeo44中,我们只有,但例如,当我的UserEntity的属性(电子邮件)更改时,我不知道如何更新该属性。 我也尝试使用neo4j模板,但使用现有节点id保存实体会导致下面的回滚。 如何更新节点或节点属性?

  • 我有以下Spring数据Neo4j 5实体: 现在,节点具有以下标签: 在某些情况下,根据我的项目要求,我需要使用附加属性扩展节点,例如和。 我不想更改现有的类,而是想引入一个新的继承类,例如: 我有一个问题,下面的查询是否也返回的实例? 是否可以通过以下查询搜索节点(通过label)?

  • 当我使用SpringDataNeo4j在数据库中持久化节点时。它保留重复的节点,如“person”和“_person”。它都包含相同的数据。所以我想阻止sdn的这种行为。 我没有使用任何继承,只是每个类都有所有属性。 另外,如果我直接从neo4j服务器插入数据,sdn将无法获取它。

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

  • 我正在构建一个应用程序,我的用户可以在其中管理字典。一个功能是上传一个文件来初始化或更新字典的内容。 我首先关注的结构部分是