使用Jpa查询数据报错不能把查到的数据转换为实体,打断点进行查询发现也确实是查询到了数据。但还是报错ClassCastException: [Ljava.lang.Object; cannot be cast to User。最后发现是Jpa写的不规范!

因为在Jpa中,使用@Query注解时候,默认是HQL语法,HQL语法里面不能使用select *,必须是所有字段,并且HQL里面from后面是实体类名称,不是表名称!nativeQuery = true 表示这是一个原生的sql,并非HQL语句..例如:

/**
 * 原生sql 查询写法
 * @param username
 * @return
 */
@Query(value = " SELECT * from t_user where username=:username", nativeQuery = true)
User findUserByUsername(@Param("username") String username);

/**
 * Hql语法 查询写法
 * @param sex
 * @return
 */
@Query(value = "from User u where u.sex=:sex")
User findUserBySex(@Param("sex") String sex);

/**
 * 原生sql 修改,使用事务
 * @param sex
 * @param username
 */
@Modifying
@Transactional
@Query(value = " UPDATE t_user SET username=:username WHERE sex=:sex", nativeQuery = true)
void updateBySexSql(@Param("sex") String sex, @Param("username") String username);

/**
 * Hql语法 修改,使用事务
 * @param sex
 * @param username
 */
@Modifying
@Transactional
@Query(value = " UPDATE User SET username=:username WHERE sex=:sex")
void updateBySexHql(@Param("sex") String sex, @Param("username") String username);