org.hibernate.MappingException:使用 `json_agg` 查询时,没有 JDBC 类型的方言映射:1111

问题描述 投票:0回答:1

当我尝试运行 jpql 本机查询时,每次都会收到此错误,我使用这个,

     @Query(value = "select nd.activity, coalesce(json_agg(nd.channel), '[]') as channels, nd.description  from" +
            " notification_detail nd where nd.activity = :activity group by nd.activity, nd.description, nd.channel",
            nativeQuery = true)
    List<NotificationListDto> fetchAllNotificationOn(String activity);


我怀疑

json_agg
有问题,尽管我正在运行 Postgres 14。我觉得它应该可以工作,但我没有收到错误。


[2024-08-04 16:54:13] [ERROR]   [http-nio-9090-exec-1] [o.a.c.c.C.[.[.[/].[dispatcherServlet]   (175)] >> Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.orm.jpa.JpaSystemException: No Dialect mapping for JDBC type: 1111; nested exception is org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111] with root cause
org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111

这是我返回的界面

public interface NotificationListDto {
    String getActivity() ;
    JsonNode getChannels();
    String getDescription();

}

当我尝试删除 json_agg 时,它工作得很好,

    @Query(value = "select nd.activity,  nd.description  from" +
            " notification_detail nd where nd.activity = :activity group by nd.activity, nd.description, nd.channel",
            nativeQuery = true)
    List<NotificationListDto> fetchAllNotificationOn(String activity);

我想如果 json_agg 不起作用,还会有其他方法或者我正在运行的问题。 谢谢您的帮助。

java spring-boot hibernate
1个回答
0
投票

您的查询中如何使用

GROUP BY
子句似乎有些混乱。

您已按 nd.activitynd.descriptionnd.channel 进行分组,这意味着您尝试按 nd.channel 进行聚合,但也尝试使用 json_agg(nd.channel) 进行聚合)。通常,如果您想针对相同的活动和描述对所有频道进行分组,则应单独使用 json_agg(nd.channel)。

更正查询

@Query(value = "SELECT nd.activity, COALESCE(json_agg(nd.channel), '[]') AS channels, nd.description " +
               "FROM notification_detail nd " +
               "WHERE nd.activity = :activity " +
               "GROUP BY nd.activity, nd.description",
       nativeQuery = true)

这里我用了一些假数据来测试一下,你可以查看:json_agg

© www.soinside.com 2019 - 2024. All rights reserved.