Spring JPA с расширением Postgres ltree - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь заставить индексирование дерева работать с Spring JPA. У меня есть объект, который содержит путь, подобный этому

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

Класс LTreeType является копией вставки отсюда Получение ошибки при отображении 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

Как видите, я испробовал почти все комбинации, но пока безрезультатно. Я также пробовал те же запросы, что и собственные запросы в диспетчере сущностей, но это не имеет значения. Что мне здесь не хватает?

1 Ответ

0 голосов
/ 01 февраля 2020

Решил, это была моя ошибка. Параметр запроса был

"folder.anotherFolder"

вместо

"folder.anotherFolder.*"

...