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]