Hibernate QuerySyntaxException:EntityManager创建查询时路径无效
解决HQL QuerySyntaxException: Invalid path 异常
这个错误的根源很明确:你写的HQL查询里用了一个未定义的别名generatedAlias1,但整个查询只给Producto实体起了generatedAlias0这个别名,Hibernate根本找不到generatedAlias1对应的实体,自然会抛出路径无效的异常。
具体修正步骤:
清理无效的别名引用
你的需求是搜索Producto自身的Codigo和Descripcion属性,完全不需要第二个别名。把查询里的generatedAlias1全部替换成generatedAlias0(或者换成更直观的别名,比如p)。核对实体属性名
错误里出现了_codigo,要确认你的Producto实体类里的属性是codigo还是_codigo:HQL是基于Java实体的属性名来写的,不是数据库表的字段名。如果实体类里的属性是private String codigo;,那HQL里就应该写p.codigo而不是p._codigo。
修正后的示例代码:
// 假设从前端拿到的搜索值是inputValue String inputValue = "%" + 前端传入的值 + "%"; // 正确的HQL统计查询 String queryCount = "select count(p) from com.its.entidades.db.Producto p where p.codigo like :searchVal or p.descripcion like :searchVal"; TypedQuery<Long> typedQuery = em.createQuery(queryCount, Long.class); typedQuery.setParameter("searchVal", inputValue); Long totalCount = typedQuery.getSingleResult();
额外提示:
- 尽量使用命名参数(比如
:searchVal)代替位置参数,这样查询可读性更强,也不容易因为参数顺序出错。 - 如果你的persistence.xml里已经配置了实体的扫描包,HQL里可以直接写
Producto而不用全限定类名,会更简洁。
内容的提问来源于stack exchange,提问作者Pablo De Luca
相关产品推荐
相关产品推荐

