我正在使用 Spring Data JPA 和在 MariaDB 上运行的 EclipseLink。

我在我的存储库中声明了以下接口方法:

@Query("""SELECT CASE WHEN COUNT(tj.id) > 0 THEN true ELSE false END 
    FROM TrackingJob tj
     WHERE tj.id = :id AND tj.parent IS NULL""")
fun isMasterTrackingJob(@Param("id") id: Long): Boolean

从代码中调用它时,我总是得到一个 ClassCastException:

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Boolean
at com.sun.proxy.$Proxy258.isMasterTrackingJob(Unknown Source)
at com.xetics.mes.tracking.service.TrackingJobService.assertIsMasterJob(TrackingJobService.java:578)
at com.xetics.mes.tracking.service.TrackingJobService.findAllTraceabilityInformation(TrackingJobService.java:712)

我的假设是,Spring 能够将返回值映射01布尔值。那是错的吗?如果我直接在 MariaDB 上执行该语句,我会得到0or1作为结果。

我在这里做错了什么?


你没有做错任何事。

对于 MariaDB 和 MySQLtruefalse别名为整数10.

同样的结果以更简单的形式出现:

SELECT COUNT(tj.id) > 0 FROM ...