2009-07-09 28 views
2

鑑於以下example from Hibernate Make Easy,如何在Grails中調用命名查詢user.findByLoginName?如何在Grails中調用命名查詢

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

您必須使用Hibernate會話。

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

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

使用Grails 1.0,您需要將sessionFactory對象注入Controller/Service以訪問它。

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傳遞能力。