如何在Grails中调用命名查询

时间:2009-07-09 06:13:57

标签: hibernate grails

鉴于以下example from Hibernate Make Easy,如何在Grails中调用命名查询user.findByLoginName?

package com.examscam.model;
import javax.persistence.*;
import org.hibernate.Session;
import com.examscam.HibernateUtil;
@Entity
@Table(name = "user", schema = "examscam")
@NamedQuery(name="user.findByLoginName",
   query="from User where loginName = :name" )
public class User {     }

2 个答案:

答案 0 :(得分:2)

您必须使用Hibernate会话。

在Grails 1.1中,您可以使用类的withSession方法。

User.withSession { session ->
    return session.getNamedQuery('user.findByLoginName')
        .setString('name', 'someName')
        .list() 
} 

使用Grails 1.0,您需要将sessionFactory对象注入Controller / Service以获取对它的访问权。

答案 1 :(得分:2)

1.2引入了命名查询支持作为域对象内部闭包的一部分。这应该会使这更容易。

自: http://www.grails.org/1.2-M3+Release+Notes

class Publication {
   String title
   Date datePublished

  static namedQueries = { 
        recentPublications { 
               def now = new Date() 
                gt 'datePublished', now - 365 
        }

        publicationsWithBookInTitle { 
          like 'title', '%Book%' } 
        }
}

用法

// get all recent publications…  
def recentPubs = Publication.recentPublications()

这是doc: http://grails.org/doc/latest/ref/Domain%20Classes/namedQueries.html

传递参数的能力听起来是1.2RC1。