Spring 带有 Postgres ltree 扩展的 JPA
Spring JPA with Postgres ltree extension
我正在尝试使 ltree 索引与 Spring JPA 一起工作。我有一个包含这样路径的实体
@Type(type = "com.thomaster.ourcloud.model.filesystem.LTreeType")
@Column(columnDefinition="ltree")
private String relativePath;
LTreeType class 是从这里复制粘贴的 。
数据库中的索引已正确完成,添加了ltree扩展。仍然当我 运行 以下查询
@Query(value = "SELECT * FROM file_system_element WHERE relative_path ~ lquery(:pathToSearch)", nativeQuery = true)
List<FileSystemElement> findAllByPath(@Param("pathToSearch") String pathToSearch);
我明白了
org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111
.
当我将查询更改为
SELECT * FROM file_system_element WHERE relative_path ~ CAST(:pathToSearch AS lquery)
#OR TO THIS
SELECT * FROM file_system_element WHERE relative_path @> CAST(:pathToSearch AS ltree)
#OR TO THIS
SELECT * FROM file_system_element WHERE relative_path @> ltree(:pathToSearch)
#OR TO THIS
SELECT * FROM file_system_element WHERE ltree(relative_path) ~ lquery(:pathToSearch)
我得到同样的错误。
对于
SELECT * FROM file_system_element WHERE relative_path @> lquery(:pathToSearch)
我明白了
org.postgresql.util.PSQLException: ERROR: operator does not exist: ltree @> lquery
以及:
SELECT * FROM file_system_element WHERE ltree(relative_path) ~ ltree(:pathToSearch)
我得到:
ERROR: operator does not exist: ltree ~ ltree
如您所见,我几乎尝试了所有组合,仍然没有结果。我还在实体管理器上尝试了与本机查询相同的查询,但没有任何区别。我在这里错过了什么?
解决了,是我的错。查询参数是
"folder.anotherFolder"
而不是
"folder.anotherFolder.*"
我正在尝试使 ltree 索引与 Spring JPA 一起工作。我有一个包含这样路径的实体
@Type(type = "com.thomaster.ourcloud.model.filesystem.LTreeType")
@Column(columnDefinition="ltree")
private String relativePath;
LTreeType class 是从这里复制粘贴的
数据库中的索引已正确完成,添加了ltree扩展。仍然当我 运行 以下查询
@Query(value = "SELECT * FROM file_system_element WHERE relative_path ~ lquery(:pathToSearch)", nativeQuery = true)
List<FileSystemElement> findAllByPath(@Param("pathToSearch") String pathToSearch);
我明白了
org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111
.
当我将查询更改为
SELECT * FROM file_system_element WHERE relative_path ~ CAST(:pathToSearch AS lquery)
#OR TO THIS
SELECT * FROM file_system_element WHERE relative_path @> CAST(:pathToSearch AS ltree)
#OR TO THIS
SELECT * FROM file_system_element WHERE relative_path @> ltree(:pathToSearch)
#OR TO THIS
SELECT * FROM file_system_element WHERE ltree(relative_path) ~ lquery(:pathToSearch)
我得到同样的错误。
对于
SELECT * FROM file_system_element WHERE relative_path @> lquery(:pathToSearch)
我明白了
org.postgresql.util.PSQLException: ERROR: operator does not exist: ltree @> lquery
以及:
SELECT * FROM file_system_element WHERE ltree(relative_path) ~ ltree(:pathToSearch)
我得到:
ERROR: operator does not exist: ltree ~ ltree
如您所见,我几乎尝试了所有组合,仍然没有结果。我还在实体管理器上尝试了与本机查询相同的查询,但没有任何区别。我在这里错过了什么?
解决了,是我的错。查询参数是
"folder.anotherFolder"
而不是
"folder.anotherFolder.*"