我有一个旧的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/