Spring Data JPA中使用JPQL语句查询问题——XXX is not mapped(当你怎么改语句都没用时。。)
程序员文章站
2022-03-02 17:17:49
...
Spring Data JPA中使用JPQL语句查询问题——XXX is not mapped(当你怎么改语句都没用时。。)
实体类
@Data//自动生成get/set/tostring
@Entity(name = "tab_admin")//交给jpa管理实体,并设置映射到数据库的表名(坑)
public class FairyAdmin {
//字段省略...
}
Dao
@Repository
public interface FairyAdminDao extends JpaRepository<FairyAdmin,Integer> {
//使用JPQL查询
//@Query(value = "select a from FairyAdmin a where a.adminUsername like %?1%")
//public List<FairyAdmin> myFindAllByUsernameLike_JPQL(String username);
@Query("select a from FairyAdmin a")
List<FairyAdmin> myFind();
}
看起来一切OK?
结果:测试运行时一直提示错误
java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException
org.hibernate.hql.internal.ast.QuerySyntaxException: XXX is not mapped
反复的检查JPQL语法,没问题啊,网上查找类似的问题,也就是一直说需要写上实体类的类名,我也写上了啊,(我甚至还考虑到是不是LomBok的锅。。徒劳。。)但为什么还是出错呢?
终极原因
在JPQL语法中,select a from 类名 a
这语句中的类名
其实不只是参照你的实体类名,他会优先参照的是你在实体类上使用的注解@Entity(name = "tab_admin")
中的自定义name字段,因此,修改JPQL语句
@Query("select a from tab_admin a")
List<FairyAdmin> myFind();
这样子终于能查询出来了!好坑啊有木有!!!花了2小时找这BUG真的难受。。。网上怎么没人和我一样碰到呢,QAQ。。
还有个建议,在实体类上不要使用@Entity(name = "tab_admin")
来标注名称,需要指定映射的数据库名,最好使用@Table(name="XXX")
。
上一篇: 记一次性能优化过程
下一篇: 【Spring boot】过滤器