groovy.lang.MissingMethodException [GrailsHttpSession.createQuery() ]
groovy.lang.MissingMethodException [ GrailsHttpSession.createQuery() ]
import static org.springframework.http.HttpStatus.*
import grails.transaction.Transactional
import java.lang.String
import org.hibernate.Query
// grails controller logic
String hql ="SELECT state,count(team_id) FROM Obstacle where team_id = :teamId and state IN :states group BY state";
Query t=session.createQuery(hql);
t.setParameter("teamId",item[0]);
t.setParameterList("states",stateList);
List team = t.list();
以上是我正在执行的查询。
我得到的错误是:
Class:groovy.lang.MissingMethodException
留言
无方法签名: org.codehaus.groovy.grails.web.servlet.mvc.GrailsHttpSession.createQuery() 适用于参数类型:(java.lang.String) 值:[SELECT state,count(team_id) FROM Obstacle where team_id = :teamId and state IN :states group BY state]
谢谢,
您面临的问题是控制器上下文中的变量 session
指的是 GrailsHttpSession
,而您正在寻找的是 Hibernate 会话。
为了获得 Hibernate 会话,您需要使用 sessionFactory
,您可以像这样将其注入控制器:
class MyController {
def sessionFactory
...
def someAction() {
...
String hql = "..."
def theHibernateSession = sessionFactory.currentSession
Query t = theHibernateSession.createQuery(hql)
...
}
...
}
但是,由于您使用的是 Grails,很遗憾您没有使用 executeQuery 或 GORM 中可用的任何其他方法来做同样的事情。
import static org.springframework.http.HttpStatus.*
import grails.transaction.Transactional
import java.lang.String
import org.hibernate.Query
// grails controller logic
String hql ="SELECT state,count(team_id) FROM Obstacle where team_id = :teamId and state IN :states group BY state";
Query t=session.createQuery(hql);
t.setParameter("teamId",item[0]);
t.setParameterList("states",stateList);
List team = t.list();
以上是我正在执行的查询。
我得到的错误是:
Class:groovy.lang.MissingMethodException
留言 无方法签名: org.codehaus.groovy.grails.web.servlet.mvc.GrailsHttpSession.createQuery() 适用于参数类型:(java.lang.String) 值:[SELECT state,count(team_id) FROM Obstacle where team_id = :teamId and state IN :states group BY state]
谢谢,
您面临的问题是控制器上下文中的变量 session
指的是 GrailsHttpSession
,而您正在寻找的是 Hibernate 会话。
为了获得 Hibernate 会话,您需要使用 sessionFactory
,您可以像这样将其注入控制器:
class MyController {
def sessionFactory
...
def someAction() {
...
String hql = "..."
def theHibernateSession = sessionFactory.currentSession
Query t = theHibernateSession.createQuery(hql)
...
}
...
}
但是,由于您使用的是 Grails,很遗憾您没有使用 executeQuery 或 GORM 中可用的任何其他方法来做同样的事情。