0

我正在尝试使 ltree 索引与 Spring JPA 一起工作。我有一个包含这样路径的实体

@Type(type = "com.thomaster.ourcloud.model.filesystem.LTreeType")
@Column(columnDefinition="ltree")
private String relativePath;

LTreeType 类是从这里复制粘贴在 hibernate 中映射 PostgreSQL LTREE 列时出现错误

索引在数据库中正确完成,添加了 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

如您所见,我几乎尝试了所有组合,但仍然没有结果。我还尝试了与实体管理器上的本机查询相同的查询,但没有区别。我在这里想念什么?

4

1 回答 1

0

解决了,是我的错。查询参数是

"folder.anotherFolder"

代替

"folder.anotherFolder.*"

于 2020-02-01T18:44:32.650 回答