鉴于以下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 { }
答案 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。