You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hibernate多对一关联场景下按分类ID查询商品列表的实现问题

HQL查询错误修正方案

你现有代码的核心问题在于HQL语法不符合Hibernate面向实体的查询规则,具体错误点及修正如下:

  • 错误1:HQL对实体名大小写敏感,必须和你的实体类名完全一致,你写的product要改为Product
  • 错误2:Product实体中没有直接声明categoryId字段,关联的是category对象,要通过关联属性访问分类ID,即category.categoryId
  • 错误3:HQL的命名参数前必须加冒号:标识,你写的WHERE categoryId = categoryId无法被识别为参数匹配,需要改为WHERE category.categoryId = :categoryId
  • 错误4:入参categoryId是int类型,调用setLong类型不匹配,改为setParameter即可自动适配类型

修正后的代码如下:

@Override
public List<Product> getListByCategory(int categoryId) {
    Session session = sessionFactory.getCurrentSession();
    Query query = session.createQuery("FROM Product WHERE category.categoryId = :categoryId");
    query.setParameter("categoryId", categoryId);
    List<Product> list = query.list();
    return list;
}

也可以通过直接匹配关联实体的方式实现,写法更直观:

@Override
public List<Product> getListByCategory(int categoryId) {
    Session session = sessionFactory.getCurrentSession();
    Category category = session.get(Category.class, categoryId);
    Query query = session.createQuery("FROM Product WHERE category = :category");
    query.setParameter("category", category);
    return query.list();
}

内容的提问来源于stack exchange,提问作者Kira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:54:05