Hibernate3中写原生态sql注意事项

  环境:Hibernate3
    下面是根据传过来的condition值,例如我的Teacher(这里是个对象)表中有个name字段,想根据这个字段去查询表中的数据,条件的格式是name like '肖%',这样写是错误的,因为Hibernate在解析一个HQL语句的时候,对表和字段都进行了别名,那么你传个name like '肖%'这样的条件,hibernate不知道name是个什么?不知道是表中的一个字段,所以下面的查询总是返回null.
    public List find(String condition) {
        String hql = " from Teacher where "+condition;
        List result = getHibernateTemplate().find(hql);
        if (result.size() > 0){
            return result;
        }
        return null;
    }

所以如果你要按一个字段或指定字段查询表中数据,你写成下面的形式是正确的,可以查询出数据
    public List find(String name) {
        String hql = " from Teacher where name like ?";
        List result = getHibernateTemplate().find(hql, name+"%");
        if (result.size() > 0){
            return result;
        }
        return null;
    }

所以对于我们需要按给定的查询条件怎么去查询呢,使用下面的方法就可以了,使用SQL进行查询。

    public List find(String condition) {
        String sql = "select  {t.*} from teacher  t where "+condition;
       SQLQuery sqlQuery = session.createSQLQuery(sql);
       sqlQuery.addEntity("t", Teacher.class);
        List result = sqlQuery.List();
        if (result.size() > 0){
            return result;
        }
        return null;
    }
这样就可以查询出数据了,但是这样的写法需要注意一点:
 select 的时候必须是 select {t.*}  from  ,不能是 select * from ,否则会报错,说无效的字段名。。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值