Spring JPA查询实体布尔属性报错,如何正确实现该查询?
解决方法
出错原因是你用了数据库的表名和列名编写查询,但默认@Query使用的是JPQL(面向实体的查询语言)而非原生SQL,JPQL会把T_MYTABLE和IS_ACTIVE解析成实体相关对象,导致返回类型和方法声明的Boolean不匹配。以下是几种正确实现方式:
方式一:使用JPQL查询实体属性
直接针对实体类MyClass的属性编写查询,JPQL会自动映射到对应的数据库表和字段:
public interface MyClassRepository extends Repository<MyClass, Long> { @Query("SELECT mc.isActive FROM MyClass mc WHERE mc.id = ?1") Boolean isActive(Long id); }
方式二:使用原生SQL查询
如果要直接操作数据库表和列,需要给@Query添加nativeQuery = true参数,明确这是原生SQL:
public interface MyClassRepository extends Repository<MyClass, Long> { @Query(value = "SELECT IS_ACTIVE FROM T_MYTABLE WHERE ID = ?1", nativeQuery = true) Boolean isActive(Long id); }
方式三:使用Spring Data方法命名规则(无需手动写查询)
Spring Data支持根据方法名自动生成查询,这种方式更简洁:
public interface MyClassRepository extends Repository<MyClass, Long> { Boolean findIsActiveById(Long id); }
内容的提问来源于stack exchange,提问作者user13121591
相关产品推荐
相关产品推荐

