0

我正在尝试使用本机查询从 postgres DB 中获取树,下一个查询使用 psql 终端可以正常工作:

SELECT col_1 FROM my_tree WHERE parent_id  ~ lquery('*.C.*')

但是当我使用实体管理器添加相同的查询时:

private List<String> fetchTreeByParentId() {
        Query query = entityManager.createNativeQuery("SELECT col_1 FROM my_tree WHERE parent_id  ~ lquery('*.C.*')");
        return query.getResultList();
    }

我收到下一个错误:

2021-04-28 08:21:51.105  WARN 107978 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 0, SQLState: 42883
2021-04-28 08:21:51.105 ERROR 107978 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : ERROR: function lquery(unknown) does not exist
  Hint: No function matches the given name and argument types. You might need to add explicit type casts.
  Position: 65

我有一些我错过的东西......也许更新postgresql jar?

该项目是spring boot 2.4.2

4

1 回答 1

0

所以感谢@jjanes,我注意到像lquery&这样的数据类型ltree在我的数据库模式中,所以我不得不将我的代码更改为:

1.- 使用 lquery 获取节点以使用 ' .C 之类的模式。'

@Query(value = "SELECT my_col FROM {h-schema}my_tree where parent_id OPERATOR({h-schema}~) {h-schema}lquery(:parentId)", nativeQuery = true)
List<String> treeByParentId(@Param("parentId") String parentId);

2.- 使用 ltree 获取节点以使用节点的标签,例如“C”

@Query(value = "SELECT my_col from {h-schema}my_tree where parent_id OPERATOR({h-schema}<@) ( "
            + "    SELECT parent_id FROM {h-schema}my_tree WHERE node_label = :parentId "
            + "  );", nativeQuery = true)
List<String> treeByParentId(@Param("parentId") String parentId);

我在public架构中有 ltree 扩展,无需添加{h-schema}OPERATOR我遇到了问题,因为我没有使用公共架构

于 2021-04-28T22:58:53.260 回答