1

获取时不工作

Message = could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract

pathToSearch = "a.b"

@Query(value = "SELECT * FROM my_class WHERE path ~ '*.:pathToSearch.*{1}'", nativeQuery = true)
List<MyClass> getAllChild(@Param("pathToSearch") String pathToSearch);

在本机 SQL 中工作,即
SELECT * FROM my_class WHERE path ~ '*.a.b.*{1}';

4

2 回答 2

1

请在将来发布格式为代码的完整堆栈跟踪。堆栈跟踪携带更多信息,而不仅仅是错误消息。也就是说,我想我可以正确猜测这里发生了什么。

看起来您正在尝试:pathToSearch用作绑定参数。但是你使它成为字符串文字的一部分:' .:pathToSearch。{1}'` 因此没有发生绑定参数替换。

你需要做的是*.a.b.*{1}从它的部分*.:pathToSearch和组装完整的字符串.*{1}

您可以使用concat 操作在数据库中执行此操作

SELECT * FROM my_class WHERE path ~ '*.' || :pathToSearch || '.*{1}'

或者您使用SpEL 表达式在 java 端执行此操作:

SELECT * FROM my_class WHERE path ~ :#{'*.' + #pathToSearch + '.*{1}'}
于 2020-06-05T06:55:51.253 回答
0

使用以下替代方法:

查询将为您提供路径的所有子节点:

select path from test where path <@ 'a.b.c' and path <> 'a.b.c';

JPA:

@Query(value = "SELECT * FROM test WHERE path <@ CAST(:pathToSearch AS ltree) and path <> CAST(:pathToSearch AS ltree)", nativeQuery = true)
List<Test> getAllPath(@Param("pathToSearch") String pathToSearch);
于 2020-06-23T02:16:12.153 回答