代码之家  ›  专栏  ›  技术社区  ›  Brad Rhoads

如何在Grails中调用命名查询

  •  2
  • Brad Rhoads  · 技术社区  · 17 年前

    鉴于以下情况 example from Hibernate Make Easy

    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 回复  |  直到 17 年前
        1
  •  2
  •   geofflane    17 年前

    您必须使用Hibernate会话。

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

    在grails1.0中,您需要将sessionFactory对象注入到控制器/服务中才能访问它。

        2
  •  2
  •   sth    16 年前

    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()
    

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

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