oracle - 使用java.Date无法在grails中评估oracle日期字段

标签 oracle grails gorm

我有一个旧的Oracle表映射到下面列出的Grails中的Domain类:

class myDomain implements Serializable {

    String id
    String baseCountry
    Date expireDate

static constraints = {
}
static mapping = {
    version false
    autoTimestamp false
    datasource 'OraDataSource'
    table "MY_ACCOUNT"
    id column: "LICENSE_NUMBER", generator: "assigned"
    baseCountry column: "BASE_COUNTRY"
    expireDate column: "EXPIRE_DATE" NOTE:  This is an Oracle DATE type
}

我在Grails中设置了日期,如下所示:
def now = new Date()
def currentYear = now[YEAR]
def expireDateBegin  = new Date()
def expireDateEnd = new Date()

expireDateBegin[YEAR] = currentYear
expireDateBegin[MONTH] = DECEMBER
expireDateBegin[DATE] = 30

expireDateEnd[YEAR] = currentYear +1
expireDateEnd[MONTH] = JANUARY
expireDateEnd[DATE] = 01        

当我使用带有日期条件的动态查找器时,没有返回结果:
def iftaAccountInfo = 
    CTaxAccount.findByBaseCountryAndExpireDateBetween(
        country, 
        expireDateBegin, 
        expireDateEnd, 
        [max: 1, sort: "expireDate", order: "desc"])

如果仅对国家/地区使用动态查找器,则可以看到结果,而在查看调试器时,该日期将被转换为时间戳。

设置了logSql = true时,SQL是正确的,但是当GORM在查询中设置日期时,日期发生了一些变化。我不知道这个。任何帮助将不胜感激。
我还尝试使用Date().ClearTime()清除时间。没变。

我正在运行Grails 2.3.4,OJDBC7.jar和JDK 1.7_045。 Oracle数据源设置为ReadOnly,因为这是我用于查找的旧数据库。

最佳答案

您有理由将日期分成几部分吗?我通常使用SimpleDateFormat类并处理从params对象接收的字符串。

import java.text.SimpleDateFormat

def country = params.country
String strExpireDateBegin, strExpireDateEnd

//This is dependent on what values you're passing to your service.
strExpireDateBegin = (params.startDate == null)?"":params.expireDateBegin
strExpireDateEnd = (params.endDate == null)?"":params.expireDateEnd

//This would be how I would generate the expiration date a year from the expireBeginDate
Date expireDateBegin = new Date()
Date expireDateEnd = expireDateBegin + 365


***use this for rendering the string into a Date***
Date expireDateBegin, expireDateEnd
expireDateBegin = new SimpleDateFormat("yyyy-MM-dd").parse(strExpireDateBegin)
expireDateEnd = new SimpleDateFormat("yyyy-MM-dd").parse(strExpireDateEnd)

***results = MyCriteria.list {
  and {
      country = myCountry
  }
  between("expireDate", expireDateBegin, expireDateEnd)
  order("expireDate", "desc")
}

***用于日期渲染的Bootstrap.groovy配置
def init = { servletContext ->
    JSON.registerObjectMarshaller(Date) {
        return it?.format("yyyy-MMM-dd")
    }
}

关于oracle - 使用java.Date无法在grails中评估oracle日期字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22792990/

相关文章:

sql - 从 SQL Server 到 Oracle 使用点表示法与 OpenQuery

ajax - Grails remoteFunction Ajax协助

grails - 如何在GEB自动化中单击单选按钮

grails - grails gorm级联保存最佳实践

hibernate - 在公式列中进行空检查

c# - Oracle 日期格式 — 数据读取器无法识别 to_char 函数

oracle - 什么时候应该在游标中使用 'for update nowait'?

oracle - 重启服务器后出现 ORA-12514

css - 如何使用 grails 渲染服务打印折叠标记?

grails - 命名查询中的Grails GORM计数功能