报错:
org.hibernate.hql.internal.ast.QuerySyntaxException: t_user is not mapped [updatePasswordByUsername......(省略)
解决办法:
将SQL中的表名换成实体类名。
问题情景:
public interface UserRepository extends CrudRepository<User, Integer> {
/**
* @Query("sql")
* sql中的update XXX 这里 XXX并不是指数据库中的表名称,而是对应实体中的类名。
* 因为Hibernate是对类查询的 ,而不是对数据库表进行查询
*/
@Query(" select t from t_user t")
List<User> getList();
@Transactional
@Modifying
@Query("update t_user t set t.password = :password where t.username = :username ")
int updatePasswordByUsername(@Param("password") String password,
@Param("username") String username);
@Query(" select t from t_user t where t.username = :username")
User selectOne(@Param("username") String username);
}
这是一段在SpringBoot中应用JPA的例子,t_user是数据库中的表名称,entity为User.class。
于是写过MySQL的,第一印象肯定是从表中查啊,于是就像上例一样。
因为Hibernate是对类查询的 ,而不是对数据库表进行查询,所以找不到t_user这个类,而且我们指定的是User
CrudRepository<User, Integer>。故此。