解决方案 »

  1.   

    命名参数设置的不对,hibernate查询关联表之间的数据  是要配置一对多或者多对一的
      

  2.   

    :STGeomFromText 要赋值?Not all named parameters have been set: [:STGeomFromText]
      

  3.   

    一个名称参数占位符没有赋上值
    最好还是通过setParameter来传递参数最好。
      

  4.   


    不可能啊,那个根本就不是参数何来赋值一说?而且这个SQL可以直接在数据库中运行的啊。请注意我geom字段类型为geometry,STGeomFromText是geometry类型自带的。
      

  5.   


     [select p.* from t_project p left join t_region r on p.region_id = r.id left join t_position_face pf on pf.geom.STContains(geometry::STGeomFromText('POINT('+p.gpsx +' '+p.gpsy+')', 0)) = 1 where p.is_delete = 0 and r.is_delete = 0 and r.id = 354 and ( ( p.keywordid like '13' or p.keywordid like ',13' or p.keywordid like '13,' or p.keywordid like '13,%' or p.keywordid like '%,13,%' or p.keywordid like '%,13' ) or ( pf.id = 13 ) ) order by id desc]试这个sql
      

  6.   

    在hql里面  你使用 :xxxx这种格式,Hibernate 就会认为 你是要传参进去!
      

  7.   

    select * from t_project p
    left join t_position_face_test ft on ft.geom.STContains(geometry::STGeomFromText('POINT('+p.gpsx +' '+p.gpsy+')', 0)) = 1
    where ft.id = 7
    这句可以在执行成功的话,楼主试试将Query query =super.getSession().createSQLQuery(sql).addEntity(classStr);
    改为Query query =super.getSession().createSQLQuery(sql);
      

  8.   


    貌似还真是你说的这么回事,那肿么办?可以尝试 下 query.setParameter(":STGeomFromText",":STGeomFromText");
      

  9.   


    貌似还真是你说的这么回事,那肿么办?
    如果你没有参数的话,使用HQL直接执行查询就可以了
      

  10.   


    貌似还真是你说的这么回事,那肿么办?可以尝试 下 query.setParameter(":STGeomFromText",":STGeomFromText");不行啊,冒号就是传不过去。
      

  11.   


    貌似还真是你说的这么回事,那肿么办?
    如果你没有参数的话,使用HQL直接执行查询就可以了
    貌似还真是你说的这么回事,那肿么办?可以尝试 下 query.setParameter(":STGeomFromText",":STGeomFromText");新问题:
    刚才那个确实是因为“:”的问题,我改了后出现新问题,有见过的嘛?query.setParameter(":STGeomFromText","::STGeomFromText");新问题:
    Coldplay 2014/10/14 16:42:31
    com.microsoft.sqlserver.jdbc.SQLServerException: 'geometry@P0' 不是可以识别的 内置函数名称。
      

  12.   

    楼主先确认一下你传递的SQL语句是否需要传递参数,如果不需要的话,直接执行就可以了。我的理解是你传进去的sql本身就不用设置参数
      

  13.   

    你的内置函数 调用的时候 前面要加上库的所有者xxx.geometry
      

  14.   

    这个问题可太棘手了,关键手边也没有环境,不能试。你的SQL语句要求你要带冒号(:),而hibernate又好心办坏事把冒号加单词理解成了一个参数希望你去设置。就一定要想办法不要在sql语句里带冒号加单词的形式,还要让数据库认识。查一下你所使用的数据库的手册,看看有没有类似char(58)可以表示冒号这样的方法,或者有没有可能用其它字符代替冒号,然后通过告诉数据库那个字符表示冒号。呃,如果实在不行,就只能在数据库里写一个存储过程,程序中去调存储过程了。另外,Hibernate是不是有一种方法可以把SQL语句配在配置文件里呀?还有,那个双冒号前面的geometry表示什么?函数库?还是表示某个数据库实例呀?如果是数据库实例或schema,hibernate可以通过配置把它配到配置文件中,然后sql语句里就不用写它了。
      

  15.   

    实在不行,就从session里get出connection来,写JDBC吧。
      

  16.   


    谢谢大家了,geometry是一个数据库类型,坐标类型。我刚查了资料:要想使用hibernate的空间数据操作,就要提到一个概念 java Topology Suite (字面上理解就是 空间拓扑的意思,简称JTS,
    注意:过需要声明一点,本文中的JTS与进行java事务处理的JTS、JTA没有联系)正在看 ....
      

  17.   

    你应该是想要调用一个函数吧?在hibernate中正如大家说的那样你使用:就认为你想要传递参数,所以你可以看看如何调用函数
      

  18.   

    已解决:我吧createSQLQuery换成了JDBC来进行查询就没事了。并且也不会在出现什么“:”冒号的问题。