在Spring Data Neo4J中将参数传递给@Query中的cypher查询

问题描述 投票:1回答:2

我有一个用户域,其中:1)字符串用户名,2)字符串密码,3)角色[]角色(角色是枚举)。

我的UserRepository中的方法如下:

@Query("MERGE (n:User:_User { username: \"{0}.username\", password: \"{0}.password\", roles: \"{0}.roles\" }) RETURN n")
User registerUser(User user);

这会抛出org.springframework.core.convert.ConversionFailedException,因为它无法将String转换为角色,这是一个枚举。如果我摆脱{0} .roles周围的引号,那么它会抛出这个:

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is org.neo4j.helpers.ThisShouldNotHappenError: Developer: Andres claims that: Need something with properties

如果User参数可以直接序列化为MERGE查询或以任何方式解析此Roles [],那将是理想的。

有人可以帮我这个吗?我使用的是SDN 3.1.0和Neo4J 2.0.3。

Update1:​​理想情况下,做以下事情会很棒:

@Query("MERGE (n:User:_User {0}) RETURN n")
User registerUser(User user);
neo4j spring-data-neo4j
2个回答
1
投票

我不确定如何支持。它必须将User转换为用作参数的映射,通常当您传入实体时,它将转换为该实体的内部node-id。

你为什么不做template.save(user)

您可以尝试单独传递参数。

@Query("MERGE (n:User:_User { username: {0}, password: {1}, roles: {2} }) RETURN n")
User registerUser(String name, String password, Collection<String> roles);

0
投票

这实际上对我有用。

传递参数引用名称而不是传递参数位置。

@Query("MERGE (n:User:_User { username: {name}, password: {password}, roles: {roles} }) RETURN n")
User registerUser(String name, String password, Collection<String> roles);
© www.soinside.com 2019 - 2024. All rights reserved.