我正在使用 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 能够将返回值映射0
到1
布尔值。那是错的吗?如果我直接在 MariaDB 上执行该语句,我会得到0
or1
作为结果。
我在这里做错了什么?
你没有做错任何事。
对于 MariaDB 和 MySQLtrue
和false
别名为整数1
和0
.
同样的结果以更简单的形式出现:
SELECT COUNT(tj.id) > 0 FROM ...