当我尝试运行 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 不起作用,还会有其他方法或者我正在运行的问题。 谢谢您的帮助。
您的查询中如何使用
GROUP BY
子句似乎有些混乱。
您已按 nd.activity、nd.description 和 nd.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