Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 如何根据Grails中的Joda LocalDate查询月份和日期_Hibernate_Grails_Jodatime - Fatal编程技术网

Hibernate 如何根据Grails中的Joda LocalDate查询月份和日期

Hibernate 如何根据Grails中的Joda LocalDate查询月份和日期,hibernate,grails,jodatime,Hibernate,Grails,Jodatime,当持久化数据类型为二进制(255)时,如何基于Joda LocalDate对象的月和日组件高效地执行查询 我试图完成的是找到其出生日期(LocalDate)发生在今天(LocalDate)的“客户” 对于条件查询,这似乎是不可能的,而回到HQL则会遇到诸如 def startDate = LocalDate.now() def entries = Customer.executeQuery("SELECT c FROM Customer AS c " +

当持久化数据类型为二进制(255)时,如何基于Joda LocalDate对象的月和日组件高效地执行查询

我试图完成的是找到其出生日期(LocalDate)发生在今天(LocalDate)的“客户”

对于条件查询,这似乎是不可能的,而回到HQL则会遇到诸如

def startDate = LocalDate.now()

      def entries = Customer.executeQuery("SELECT c FROM Customer AS c " +
              "WHERE DAY(c.dateOfBirth) = DAY(:today) AND " +
              "MONTH(c.dateOfBirth) = MONTH(:today) ",[today:startDate])

因为LocalDate类型

使用
sqlRestriction

def startDate = LocalDate.now()

def entries = Customer.withCriteria{
   sqlRestriction 'DAY(dateOfBirth) = DAY(now()) AND MONTH(dateOfBirth) = MONTH(now())'
}

它允许您将SQL与条件混合使用
day()
month()
now()
函数应存在于您的数据库中,但您必须检查这是否是一个好主意,虽然它可以工作,但仍然存在问题。无法分析“日期”常量"ACED005737200176F72672E6A6F64612E74696D652F4617465FFF804D3E4EB50200024A000C694C6F63616C4D69C69734C000B694368726F6E6F6C6677974001A4C6F72676F64612F74696D652F4676F468726F6E6F67793B7870000004D10AC400737200276F726F726F676B676F64612E67677676767676F67676767676767677F76767676767F676767070767676767077F76767F7676767676767676767676767F676767676767676767676767677F67677F76767676767676767676767676767676767676767676767676767676A6F64612E74696D652E4461746554696D655A6F6E652453747562A62AF019A7C321AE30300007870770545443778";我认为最根本的问题是Joda存储的PersistantLocalDate不是SQL时间戳,因此用于日期操纵的SQL函数不再是有效的选项。。。如果我可以从Jodas二进制格式转换为时间戳,那么我应该走在正确的道路上……joda日期字段是什么样子的?在域中它是一个LocalDate,在数据库(h2)中它保存在二进制中,似乎是223字节。我不认为我能做什么,因为这是Jodas自己存储的格式。。单靠SQL无法完成任何操作。希望我在使用LocalDates之前知道这一点。然后我会切换到纯日期,如果需要,提供joda getter和setter。否则,您可以忘记查询