2009-07-09 5 views
2

Étant donné le suivant example from Hibernate Make Easy, comment puis-je appeler la requête nommée, user.findByLoginName dans Grails?Comment faire pour appeler une requête nommée dans 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 {  } 

Répondre

2

Vous devez utiliser la session Hibernate.

Dans Grails 1.1, vous pouvez utiliser la méthode withSession de la classe.

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

Avec Grails 1.0 vous avez besoin d'injecter l'objet sessionFactory dans votre contrôleur/service pour y avoir accès.

2

1.2 introduit le support de requêtes nommées dans le cadre d'une fermeture à l'intérieur de vos objets de domaine. Cela devrait rendre cela plus facile.

De: 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%' } 
     } 
} 

Utilisation

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

Voici la doc: http://grails.org/doc/latest/ref/Domain%20Classes/namedQueries.html

Sons comme la capacité de passer des paramètres est prévue pour 1.2RC1.

Questions connexes