关于Hibernate在使用原生SQL语句多表查询所遇到的问题

本文介绍了一种在使用原生SQL进行多表查询时遇到的org.hibernate.hql.internal.ast.QuerySyntaxException异常及其解决方法。通过调整查询方式从createQuery到createSQLQuery,并结合addEntity确保查询结果正确映射。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天早上想实现商品的分类功能时,使用的是原生SQL语句中的多表查询语法,遇到的问题:

  • 1、写好SQL语句后,调用createQuery(hql)方法是出现 org.hibernate.hql.internal.ast.QuerySyntaxException异常,该异常信息是映射文件的字段与数据库字段不一致,或者名称不一致导致;
public List<ClothesType> findClothesType(int categoryId) {
        String hql="select c.id,c.nameType from ClothesType as c 
        join RelationPro as r on c.id=r.clotherstypeId where 
        r.categoryId=1";
        Query query=getSession().createQuery(hql);
        //query.setInteger(0, categoryId);
        @SuppressWarnings("unchecked")
        List<ClothesType> list = query.list();
        System.out.println(list.get(0).getNameType());
        System.out.println("hhhhhhhhhh"+list.size());
        return list;
    }

最后修改为createSQLQuery(hql)才成功;

public List<ClothesType> findClothesType(int categoryId) {
        String hql="select c.id,c.nameType from ClothesType as c join RelationPro as r on c.id=r.clotherstypeId where r.categoryId=1";
        Query query=getSession().createSQLQuery(hql).addEntity(ClothesType.class);
        //query.setInteger(0, categoryId);
        @SuppressWarnings("unchecked")
        List<ClothesType> list = query.list();
        System.out.println(list.get(0).getNameType());
        System.out.println("hhhhhhhhhh"+list.size());
        return list;
    }

备注:如果没有在createSQLQuery()后调用addEntity(ClothesType.class);方法,查出来的结果集与对象字段不对应


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值