String hql="update CCompeteDogInfo set dogFullscore="+sPoint+",dogState=1 where dogBloodlinenumber='"+sNGKC+"' and competeType.CCompeteInfo.infoName='"+attributeEvent.getValue()+"'";上述是我的sql语句
competeType.CCompeteInfo.infoName这一段是错误的
CCompeteDogInfo 类中的对象
private CCompeteType competeType;CCompeteType 类中的对象
private CCompeteInfo CCompeteInfo;CCompeteInfo 类中的对象
private String infoName;请大侠指导一下那个的错误,所有配置文件都是自动生成的
错误如下:
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'set dog_fullscore=5, dog_state=1 where dog_bloodlinenumber='NG7347870266' and in' at line 1请详细说明..

解决方案 »

  1.   

    sql语法错误,粘到别的地方运行一下
      

  2.   

    competeType.CCompeteInfo.infoName没见过这么写的
      

  3.   

    sql语句写的不对,帮你顶一下!
      

  4.   

    用下面的代码适用下,你那种写法没见过。
    CCompeteType competeType=new CCompeteType();//
    competeType.CCompeteInfo.infoName=attributeEvent.getValue(); //
    String hql="update CCompeteDogInfo set dogFullscore="+sPoint+",dogState=1 where dogBloodlinenumber='"+sNGKC+"' and competeType='"+competeType'"; 
      

  5.   

    hibernate二级缓存不包括这样写的?我在搜索的时候都还是那样写的
      

  6.   

    String hql="update CCompeteDogInfo set dogFullscore="+sPoint+",dogState=1 where dogBloodlinenumber='"+sNGKC+"' and competeType.infoName='"+attributeEvent.getValue()+"'"; 将competeType.CCompeteInfo.infoName更改为
    competeType.infoName
      

  7.   

    都用HIBERNATE了还能写这么多SQL语句,那你还用HIBERNATE干什么??可能是我经验少,我不赞成你这么写
      

  8.   

    其他的我就不说了,给个建议吧,楼主写hql语句最好预编译``防sql注入...............
      

  9.   

      看错误的话 应该是SQL拼装的问题
      

  10.   

    dog_bloodlinenumber='NG7347870266' and in打印出来的错误
    这里怎么有一个in???查看一下!
      

  11.   

    另外你的思路也不对
    你这样用还是JDBC思路,没把hibernate真正用起来
    既然是更新数据
    那你传回数据库的就应该是一个游离态数据
    他会同持久态的对比,修改相应内容
      

  12.   

    com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'set dog_fullscore=5, dog_state=1 where dog_bloodlinenumber='NG7347870266' and in' at line 1 
    set dog_fullscore=5, dog_state=1 where dog_bloodlinenumber='NG7347870266' and in和你的hql匹配不上,把全部代码贴出来,还有myeclipse有个hql的调试插件你可以选把hql拿去调试下就知道问题的所在啦
      

  13.   

    你把sql语句先运行下 看能不能通过然后再改成hql
      

  14.   

    在 hibernate.cfg.xml 把  Show SQL 选项打开(值设为 ture)。运行时,控制台就会将报错的 sql 打印出来,然后拿出来到 DB 工具里面运行下,就知道哪里错了,这是最基本,最快速的方法。
      

  15.   

    语法错误啊。
    near 'set dog_fullscore=5, dog_state=1 where dog_bloodlinenumber='NG7347870266' and in' 
    附近有语法错误,你说
    competeType.CCompeteInfo.infoName这一段是错误的 。
    单独这么用应该是可以的,但是这里是否是需要加上别名。试试,希望有用。
    另外,把hibernate的show_sql打开,看看生成的hibernate生成的sql是什么。
      

  16.   

      用Hibernate就是使用实体类操作数据库 既然要修改 就先找到对应的实体类 
    然后使用Hibernate模板的Update方法就可以了 为什么还要这样做呢?请教!!
      

  17.   

    错误就是那样的,另外我用where dogBloodlinenumber='"+sNGKC+"' and competeType='"+competeType'"这个条件先找到信息,然后在调用merge方法,是可以更新的,
    我就是想问一下,如果直接写一个update语句为什么条件写成那样会不行?有没有大哥能帮忙解决下,解决了这个问题,100分至少给你80
      

  18.   

    你说了一堆,我觉得你还是发一个比较完整的代码上来,以及表结构,映射文件!
    说实话,你取的名字太费解,where dogBloodlinenumber='"+sNGKC+"' and competeType='"+competeType'能查出数据??
    那competeType是一个字段了?
    merge方法是对象在有修改情况下才会更新你的问题不明确了!
      

  19.   

    嘿嘿,不好意思,错了错了
    where dogBloodlinenumber='"+attributeNGKCRegNumberValuei+"' and competeType.CCompeteInfo.infoName='"+attributeEvent.getValue()+"'"
    这个条件是可以查出来的
      

  20.   

    我的意思是说,无论我查什么,这个where条件是对的,我最早的思想是直接写一个sql语句,就把条件更新得了
    而在update语句中这个where条件是不可以的.所以我只能先找,然后在更新
      

  21.   

    我似乎明白你的意思了?
    sql="update ...."
    你调用createQuery或者其他方法报错是吧?然后你先查询出来,然后在调用merge()
    没错???
    merge()和update()是通过对象ID去判断他是否需要更新
    hibernate里面更新都是根据ID去判断的,update语句是不需要写的
    如果你真要写,那就用createSQLQuery,这个你要自己测试,我也不清楚他是否支持update
    但是你的HQL必须换成SQL
      

  22.   

    session中已经有了UPDATE了你只要把一个持久化更改过的POJO类放到UPDATE里就可以更改数据了啊,何必非要写SQL语句哪。
      

  23.   


    同意!!!
    competeType 对象没有 CCompeteInfo 这个属性 应该直接用 competeType.infoName
      

  24.   

    好像是不太明白我的意思
    from CCompeteDogInfo where dogBloodlinenumber='"+attributeNGKCRegNumberValuei+"' and competeType.CCompeteInfo.infoName='"+attributeEvent.getValue()+"'"
    这个是查找的hql,正确
    我找到CCompeteDogInfo 的对象后,然后set一些属性,在调用merge方法不就更新了么,这个是可以的我最早是自己写了一个方法
                     Session session=this.getSession();
    int result=0;
    Query q=session.createQuery(hql);
    result=q.executeUpdate();
                   return result;
    我想用一个sql就根据条件更新了数据库,但是我写的update CCompeteDogInfo set *** where(一样的条件)就不正确,我想问一下,为什么不行
      

  25.   

    hibernate中的修改都是比如我这里有个类就叫TYPE 是一个POJO类
    TYPE type=new TYPE();
    type.setName("abc");
    session.update(type);
    在做修改的时候hibernate会做一个脏数据处理看你的数据有没有变如果有变化作出提交如果没有变化不提交不做任何改变
      

  26.   

    String hql="update CCompeteDogInfo CCD set CCD.dogFullscore="+sPoint+",CCD.dogState=1 where CCD.dogBloodlinenumber='"+sNGKC+"' and CCD.competeType.CCompeteInfo.infoName='"+attributeEvent.getValue()+"'"; 
      

  27.   

    我再看了你的错误,是你输入的SQL语句有问题。。
    但是没找到错误
    你还是加个别名试一下吧String hql = "update CCompeteDogInfo c set c.dogFullscore=" + sPoint
    + ",c.dogState=1 where c.dogBloodlinenumber='" + sNGKC
    + "' and c.competeType.CCompeteInfo.infoName='"
    + attributeEvent.getValue() + "'";
      

  28.   

    得了,不问了,别名什么的我都加过,只要在update语句中后便加上competeType.CCompeteInfo,无论.什么都是错误的.
      

  29.   

    不问了,你就给分吧。哈哈你这个是你update的SQL写错了
    MYSQL我没用过,我不知道有啥特殊语法没有。。
    你把控制台生成的SQL语句拿出来,
    就能找到你的错误了
      

  30.   

    楼主你有没有搞错,居然不用预编译的sql
      

  31.   

    这样写即使能成功,但hibernate被你用的已经没有意义了。如果你非要这么做
    建议通过session获取connection的连接,然后用jdbs来做。
      

  32.   

    这个异常是你的hql语句有错,你可以先把hql语句拼对了再放进去
      

  33.   

    楼主把你的pojo源代码和hbm.xml配置文件发出来,关键是出错的那个属性
      

  34.   

    建议 直接用 hibernate的 update()方法吧  这完全可以
      

  35.   

    System.out.println(sql);输出你的sql看看,就明白了
      

  36.   

    建议 先查到List  在用循环一个一个update()  这样简单  
      

  37.   

     这绝对是hibernate配置文件的问题,obj.obj.obj.obj 
     3级的关系 我都能成功访问到,问题不在这
    看看映射文件和实体类吧
      

  38.   

    大家好,这个群已经变更换了其目的了。已经变成了IGOOGLE爱好者的群,这里讨论IGOOGLE的应用。更重要的是我已经开始开发一个类似的IGOOGLE的平台,这个平台面向的内容不一样而已。但是我想找到志同道合的朋友一起来,谢谢,如果是成都地区最好。有兴趣的朋友加QQ群:39207574或是加我QQ好友。
    谢谢