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 中可用的任何其他方法来做同样的事情。