JpaRepository - Hibernate - java.math.BigInteger 无法转换为 java.lang.Boolean

y0b*_*0bu 3 java hibernate jpa spring-data spring-data-jpa

我已经遵循本教程https://codingexplained.com/coding/java/spring-framework/return-boolean-value-from-spring-data-jpa-query,他解释了如何从 JpaRepository 返回布尔类型,以便是做什么的:

    @Transactional
    @Override
    @Query(value = "SELECT CASE WHEN COUNT(*) = 1 THEN true ELSE false END FROM admins WHERE admins.admin_name = 'admin' AND admins.password = 'admin'", nativeQuery = true)
    boolean IsBaseAdminAccountExist();
Run Code Online (Sandbox Code Playgroud)

这东西正在扔exception is java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Boolean

小智 8

同样的错误,我分享我的解决方案:

当您构建查询并转换 true 或 false 时,必须将其括在引号中,如下所示:

@Query(value = "SELECT CASE WHEN COUNT(*) = 1 THEN 'true' ELSE 'false' END FROM admins WHERE admins.admin_name = 'admin' AND admins.password = 'admin'", nativeQuery = true)
boolean IsBaseAdminAccountExist();
Run Code Online (Sandbox Code Playgroud)

另外,我建议使用 MYSQL IF 条件来简化查询,它看起来像这样:

@Query(value = "SELECT IF(COUNT(*) > 0, 'true', 'false') FROM admins WHERE admins.admin_name = 'admin' AND admins.password = 'admin'", nativeQuery = true)
boolean IsBaseAdminAccountExist();
Run Code Online (Sandbox Code Playgroud)