Grails - 查找用户今天创建的所有帖子

时间:2011-06-23 14:50:24

标签: hibernate grails date gorm

我有一个域对象。

class Post {
  User user
  String subject
  String body
  Date dateCreated
}

我该如何解决这个问题?直接GORM,HQL或标准是更好的方法吗? 我不知道什么样的日期操作(“今天的eq”)会在标准中起作用。

5 个答案:

答案 0 :(得分:9)

我可能会做一个命名查询

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更多关于命名查询

答案 1 :(得分:4)

以下是一个标准示例:

// 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))
}

答案 2 :(得分:3)

我会使用Grails Dynamic Finders来实现这个目标:

Post.findAllByUserAndDateCreatedGreaterThanEquals(currentUser, new Date().clearTime())

其中“currentUser”是当前用户的实例

答案 3 :(得分:0)

String sqlQuery = "SELECT * FROM Post p WHERE p.dateCreated  = NOW()"
def e = Post.executeQuery(sqlQuery)

答案 4 :(得分:0)

为了完整起见,这是一个用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:这个问题有很多答案,只需拿一个你觉得舒服的答案。