2012-01-11 66 views
2

有沒有辦法使用HQL在Grails中使用Hibernate命名查詢?在Grails中使用Hibernate HQL命名查詢?

我在Harnessing Hibernate book上一直在閱讀關於它們,並想知道是否有方法在Grails中使用它們。

命名查詢都包括在內,與類映射一起,在<class-name>.hbm.xml映射文件,像這樣:

<query name="com.oreilly.hh.tracksNoLongerThan"> 
    <![CDATA[ 
     from Track as track 
      where track.playTime <= :length 
    ]> 
</query> 

現在,我敢肯定,一個<class-name>.hbm.xmlHibernate映射文件可以包含並融入Grails GORM配置爲it is stated here,其中hibernate.cfg.xml其中包括休眠映射文件可以在Grails中使用。

在舊的Hibernate和Java可以訪問這種方式:

... 
Query query = session.getNamedQuery(
       "com.oreilly.hh.tracksNoLongerThan"); 

query.setTime("length", length); 
return query.list(); 
    ... 

但是,一個人如何可以訪問Grails的這些命名查詢HQL?

我問的原因是我希望能夠將遺留數據庫映射到Grails中使用的某些對象,並將指定的查詢與映射一起存儲。

+0

P.S.我已經看到在Grails文檔中對命名查詢的引用... http://grails.org/doc/2.0.x/ref/Domain%20Classes/namedQueries.html – leeand00 2012-01-11 18:15:33

回答

5

最簡單的方法是在任何域類上使用withSession方法,例如,

SomeDomainClass.withSession { session -> 
    Query query = session.getNamedQuery('com.oreilly.hh.tracksNoLongerThan') 
    query.setTime 'length', length 
    query.list() 
} 

或更緊湊地使用方法鏈接:

SomeDomainClass.withSession { session -> 
    session.getNamedQuery('com.oreilly.hh.tracksNoLongerThan') 
     .setTime('length', length) 
     .list() 
}