您可以使用三种可能的解决方案:
1) 尝试在 grails 域类的公式中使用 DATE(DATE_SUB(StartDate, INTERVAL '${ebOpenUptoDays}' DAY))
2) 尝试在 createCriteria 中使用投影,例如 //我猜在 grails 2.1.0 或更高版本中支持。
Training.createCriteria.list{
projections{sqlProjection("DATE(DATE_SUB(start_date, INTERVAL 'eb_Open_Up_to_days DAY))",DATE)}
}
3)尝试使用本机sql
编辑:为了支持 hql,您需要创建自己的方言并在 datasource.groovy 中使用它(虽然未测试)
public class MyDialect extends MySQLInnoDBDialect{
public myDialect() {
super();
registerFunction("date_add_interval", new SQLFunctionTemplate(Hibernate.DATE, "date_sub(?1, INTERVAL ?2 ?3)"));
}
}
然后, DATE(DATE_SUB(StartDate, INTERVAL 'ebOpenUptoDays' DAY)) 应该在 hql 中为您工作。希望这可以帮助!!!
谢谢