【发布时间】:2011-09-21 07:31:59
【问题描述】:
我有一个域对象。
class Post {
User user
String subject
String body
Date dateCreated
}
我该怎么做?直接 GORM、HQL 或标准是更好的方法吗? 我不知道什么样的日期操作(“today eq”)会在标准中起作用。
【问题讨论】:
标签: hibernate grails date grails-orm
我有一个域对象。
class Post {
User user
String subject
String body
Date dateCreated
}
我该怎么做?直接 GORM、HQL 或标准是更好的方法吗? 我不知道什么样的日期操作(“today eq”)会在标准中起作用。
【问题讨论】:
标签: hibernate grails date grails-orm
我可能会做一个命名查询
class Post {
User user
String subject
String body
Date dateCreated
static namedQueries = {
todaysPosts {
def now = new Date().clearTime()
between('dateCreated', now, now+1)
}
}
}
然后你可以像这样使用它:
Post.todaysPosts.count()
或
Post.todaysPosts.list()
Post.todaysPosts.list(max: 10, offset: 5)
你甚至可以做
Post.todaysPosts.findAllByUser(user)
Here 更多关于命名查询
【讨论】:
这是一个标准示例:
// assuming future posts are disallowed
def posts = Post.withCriteria {
eq('user', user)
ge('dateCreated', new Date().clearTime())
}
// if you must accommodate future posts
def today = new Date().clearTime()
def posts = Post.withCriteria {
eq('user', user)
ge('dateCreated', today)
lt('dateCreated', today.plus(1))
}
【讨论】:
today <= dateCreated < today + 1... 不包括所有日期?
我会使用 Grails 动态查找器来完成此任务:
Post.findAllByUserAndDateCreatedGreaterThanEquals(currentUser, new Date().clearTime())
其中“currentUser”是当前用户的一个实例
【讨论】:
String sqlQuery = "SELECT * FROM Post p WHERE p.dateCreated = NOW()"
def e = Post.executeQuery(sqlQuery)
【讨论】:
为了完整起见,这是一个用 HQL 编写的查询:
def yourUser = User.get(1)
def results = Post.executeQuery( "select * from Post a where a.user = :user and a.dateCreated >= :dateCreated", [user : yourUser , dateCreated : new Date().clearTime()] );
@Tyndall:这个问题有很多答案,只要选择一个你觉得舒服的。
【讨论】: