使用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);
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。