当前位置: 代码迷 >> Java Web开发 >> Hibernate调用SQL有关问题,来解决一下
  详细解决方案

Hibernate调用SQL有关问题,来解决一下

热度:235   发布时间:2016-04-16 21:49:24.0
Hibernate调用SQL问题,来大虾解决一下!

Hibernate 调用SQL语句:

public List<Object> getObjectSQLList(String sql, Class classStr) {
Query query =super.getSession().createSQLQuery(sql).addEntity(classStr);
return query.list();
}


SQL语句里其中有一句是:

LEFT JOIN t_position_face pf ON pf.geom.STContains (
geometry :: STGeomFromText (
'POINT(' + p.gpsx + ' ' + p.gpsy + ')',
0
)
) = 1


结果现在是我这句SQL在数据库中可以执行,但是用Hibernate调用就会报错:

org.hibernate.QueryException: Not all named parameters have been set: [:STGeomFromText] [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]
at org.hibernate.impl.AbstractQueryImpl.verifyParameters(AbstractQueryImpl.java:291)
at org.hibernate.impl.SQLQueryImpl.verifyParameters(SQLQueryImpl.java:201)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:145)
at com.dcsm.dao.BaseDaoImpl.getObjectSQLList(BaseDaoImpl.java:162)
at com.dcsm.dao.ProjectDao.findProject(ProjectDao.java:118)
at com.dcsm.service.impl.ProjectServiceImpl.findProject(ProjectServiceImpl.java:21)
at com.dcsm.controller.MeddiaFirstController.searchProjectList(MeddiaFirstController.java:65)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:440)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:428)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)


完整SQL为:

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


提示geom字段类型为geometry,数据库为SQL Server:
------解决思路----------------------
命名参数设置的不对,hibernate查询关联表之间的数据  是要配置一对多或者多对一的
------解决思路----------------------
:STGeomFromText 要赋值?

Not all named parameters have been set: [:STGeomFromText]
  相关解决方案