繁体   English   中英

Spring JPA 与 Postgres ltree 扩展 (~ '*.)

[英]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.

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