![](/img/trans.png)
[英]ltree postgres type using spring data jpa -- geting syntax error after defining a function and cast within postgres
[英]Spring JPA with Postgres ltree extension (~ '*.)
获取时不工作
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 ~ '*.ab*{1}';
请在将来发布格式为代码的完整堆栈跟踪。 堆栈跟踪携带更多信息,而不仅仅是错误消息。 也就是说,我想我可以正确猜测这里发生了什么。
看起来您正在尝试使用:pathToSearch
作为绑定参数。 但是你使它成为字符串文字的一部分:' .:pathToSearch。 {1}'` 因此没有发生绑定参数替换。
您需要做的是从*.ab*{1}
*.
、 :pathToSearch
和.*{1}
。
您可以使用concat 操作在数据库中执行此操作
SELECT * FROM my_class WHERE path ~ '*.' || :pathToSearch || '.*{1}'
或者您使用SpEL 表达式在 java 端执行此操作:
SELECT * FROM my_class WHERE path ~ :#{'*.' + #pathToSearch + '.*{1}'}
使用以下替代方法:
查询将为您提供路径的所有子节点:
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.