简体   繁体   中英

Spring Data Neo4j Node NotfoundException

I am using the newest Spring Data for Neo4j. In this projects i have different groups which are reachable over the url /group/{id}/project which should return a list of all projects the user has access to. This stuff works fine, but if the user enters a real big number as groupId which does not exist in the database I got a

org.neo4j.graphdb.NotFoundException: Node 400 not found

My query looks like

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

Even if I use the method findOne() from the GraphRepository interface I got this exception.

So is it possible to tell SDN instead of throwing this exception returning null? Or does i have to catch every possible runtime exception?

I want to throw exceptions by my own ie NoSuchGroup, NoSuchUser..

I am using SDN 3.3.0.Release.

Thank you

Which is to be expected, if the node is not found.

You should not use the Neo4j node-id for this but a custom id that you create an manage when you create the Group.

eg

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM