簡體   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