[Grails] 求助,关于一个"取最后一个对象"的查询方法。
zengsun
2007-07-13
我对hibernate不熟悉!
所以不知道怎么写HQL语句。 sql语句是很简单的(以sql server为例): select top 1 * from topic order by createDate desc 这样就把topic最后一个对象查找出来了,但是这个查询在grails如何实现呢? |
|
agile_boy
2007-07-13
不知道你对Hibernate的Cirteria熟悉么?Grais对其进行了简洁的封装,在用法上更方便。
详细请看http://grails.codehaus.org/Hibernate+Criteria+Builder |
|
zengsun
2007-07-13
看了半天,没有还是不知道怎么写。可以写出来看看吗?
|
|
zengsun
2007-07-15
自己写了一个:
static def lastTopic(category) { def c = Topic.createCriteria() def result = c.list { maxResults(1) eq('category.id', category.id) order('createDate', 'desc') } if (result) return result[0] } 我把这段代码作为静态方法放在控制器中,这样是否得当? |
|
zengsun
2007-07-15
处理业务逻辑的代码放在什么地方好些?
|
|
agile_boy
2007-07-16
zengsun 写道 处理业务逻辑的代码放在什么地方好些?
复杂的业务逻辑当然实在Service里边,而有些本身属于领域的业务逻辑最好放到Domain对象中。 |
|
agile_boy
2007-07-16
zengsun 写道 自己写了一个:
static def lastTopic(category) { def c = Topic.createCriteria() def result = c.list { maxResults(1) eq('category.id', category.id) order('createDate', 'desc') } if (result) return result[0] } 我把这段代码作为静态方法放在控制器中,这样是否得当? 我个人不推荐使用静态方法,最好放到Service里边,然后在Controller里边引用Service |
|
山风小子
2007-07-16
同意agile_boy的做法,这样也可以减少代码的冗余。
还有一点,如果你使用了static就没必要再使用def了,只要像下面这样写就OK了 # static lastTopic(category) { # def c = Topic.createCriteria() # def result = c.list { # maxResults(1) # eq('category.id', category.id) # order('createDate', 'desc') # } # if (result) # return result[0] # } |