你报的错误是啥?很直观的看你的代码,在所有的and之前都没有空格,所以拼出来的HQL是有问题的,你的代码还有几个问题
1,最好用StringBuilder或者StringBuffered
2,最好不要用where 1=1这样查询效率最低。
如果你想了解更多的Hibernate查询或者HQL的东西,看我的个人简介里面的推荐资料。
那么多人说了半天都没有解决楼主所提问题,实际上这个问题我已经说个多次了,现在让我再一次来回复楼主的问题吧:
使用hql语句来完成插入操作是不能实现的,不管你使用insert into....values...还是insert into.....select.....都不行
原因:因为hibernate的hql语言是用于面向对象实现查询功能的,然而在插入操作中是不会牵涉任何查询动作的,所以hql不能用于insert语句的插入操作,而select、update、delete语句都可以有可能的查询实现,比如:
select语句时标准的查询,这个就不用再说了
update语句:update 对象名 set.....where......
delete语句:delete from 对象名 where .....
看到了没有,update与delete牵涉到where的查询筛选过程,这个过程是需要采用hql来实现的,然而insert永远牵涉不到查询筛选过程,所以hibernate没有对插入做insert实现
大家注意回答问题的时候要针锋相对,不要大非所问,比如楼主问能否采用hql实现插入动作,你们就不要再要求楼主直接调save方法,也不要再说用本地sql实现之类的,很明显这些楼主都是知道的,不用你来提醒别人应该怎么做,不应该怎么做。
搞不懂为什么有那么多人说hql可以,说着这句话的人请你们动动脑子,如果不想动脑子自己动手试一下也可以看出问题嘛,不要张开嘴就乱说一通,误人子弟。
肯定执行不了了 都没有空格 输出的sql 不对
建议:写一个 test方法 传一个user 进来 看看你输出的 sql 是什么样子 然后根据你的sql 一项项的调
还有 你那些个 !=null, .trim().length()>0 你就不能抽一个方法出来 这样好难看的
stringBuffer.append(" and education="+user.getEducation()); // and前,应该留一空格
如果查询的条件是字符串,应该加单引号。
——查询的条件,最好使用参数 。没你的环境,不太好测试。
用户登录
还没有账号?立即注册
用户注册
投稿取消
文章分类: |
|
还能输入300字
上传中....