grails或hibernate仅按时间组件搜索的条件
下面给出的是我的域对象grails或hibernate仅按时间组件搜索的条件,hibernate,grails,gorm,hibernate-criteria,Hibernate,Grails,Gorm,Hibernate Criteria,下面给出的是我的域对象 Game { Date startDate } 现在,我只想搜索在早上hh:mm AM开始的游戏动态搜索,无论日期如何。我正在寻找类似这样的Grails标准 Game.where { startDate.timePart == timeValue }.list() 其中timeValue=上午10:30或类似的时间 我使用Hibernate标准是因为GORM中不支持一些自定义限制,所以如果有人知道如何使用Hibernate标准,那就太好了 现在这就是我
Game {
Date startDate
}
现在,我只想搜索在早上hh:mm AM开始的游戏动态搜索,无论日期如何。我正在寻找类似这样的Grails标准
Game.where {
startDate.timePart == timeValue
}.list()
其中timeValue=上午10:30或类似的时间
我使用Hibernate标准是因为GORM中不支持一些自定义限制,所以如果有人知道如何使用Hibernate标准,那就太好了
现在这就是我在Hibernate标准中尝试做的,但它不起作用,我正在使用postgre
searchCriteria.add(Restrictions.sqlRestriction("to_timestamp(start_date, 'h:mm a') = ? ", timeValue, StandardBasicTypes.DATE))
非常感谢您的帮助。您可以使用HibernateCriteriaBuilder。 可以通过Grails域类的createCriteria动态静态方法检索生成器:
def c = Game.createCriteria()
def results = c {
eq("start_date",timeValue)
}
构建器也可以通过SessionFactory和持久类实例单独实例化:
new HibernateCriteriaBuilder(clazz, sessionFactory).list {
eq("start_date", timeValue)
}
您可以获得只有时间的日期实例,并在Hibernate Criteria API中使用该实例进行查询
@法希玛-非常感谢您的回复。如果我尝试使用您提供的实现,那么grails标准将尝试匹配开始日期作为日期。我想要的是,只比较时间成分。从GUI中,用户将输入类似上午10:30的信息,我必须列出所有游戏此时开始,而不管日期如何。如果我仅创建带有时间的日期实例,它将不起作用,因为startDate是保存在数据库中的时间戳,仅将其与时间进行比较不会返回预期结果。