Grails - 如果值为负,则将值显示为 0
Grails - if value is negative, show value as 0
这是asset.groovy
中的公式代码
static mapping = {
yearNow formula: 'YEAR(purchase_date)'
yearlyValue formula: 'PURCHASE_AMOUNT / LIFE_EXPECTANCY'
value formula: 'PURCHASE_AMOUNT / LIFE_EXPECTANCY * (LIFE_EXPECTANCY - (YEAR(NOW()) - YEAR(purchase_date)))'
}
如果值公式得出的值是 -ve,我需要将值声明为 0。
我该怎么做,是在控制器中还是在域中?
我在 Controller 中试过了
@Transactional
def value() {
Asset asset = Asset.get(params.value)
if (params.value <= 0) {
params.value = 0
return
}
}
嗯!现在我无法尝试我给你的建议,但在 grails 文档中很好地说,公式使用持久性模型而不是对象模型,因此它也允许添加 hql 查询。
因此,您可以尝试使用 hql 查询 CASE
语句。
This blog很好地展示了使用hql的例子。
以下内容适合您的情况:
static mapping = {
yearNow formula: 'YEAR(purchase_date)'
yearlyValue formula: 'PURCHASE_AMOUNT / LIFE_EXPECTANCY'
value formula: 'CASE WHEN PURCHASE_AMOUNT / LIFE_EXPECTANCY * (LIFE_EXPECTANCY - (YEAR(NOW()) - YEAR(purchase_date))) <0 THEN PURCHASE_AMOUNT / LIFE_EXPECTANCY * (LIFE_EXPECTANCY - (YEAR(NOW()) - YEAR(purchase_date))) ELSE 0'
此外,另一个解决方案如果您不想对您的公式使用查找器或标准查询,是为瞬态 属性 并得到如下所示的预期值:
public double getValue(){
double value = 0.0d //calculate value here
return (value <0 ? 0 : value)
}
希望对您有所帮助!!
只需覆盖域内 value
的 getter 方法来检查 -ve 值。
public double getValue(){
value < 0 ? 0 : value
}
感谢帮助,答案是
value formula: 'GREATEST(PURCHASE_AMOUNT / LIFE_EXPECTANCY * (LIFE_EXPECTANCY - (YEAR(NOW()) - YEAR(purchase_date))), 0)'
这是asset.groovy
static mapping = {
yearNow formula: 'YEAR(purchase_date)'
yearlyValue formula: 'PURCHASE_AMOUNT / LIFE_EXPECTANCY'
value formula: 'PURCHASE_AMOUNT / LIFE_EXPECTANCY * (LIFE_EXPECTANCY - (YEAR(NOW()) - YEAR(purchase_date)))'
}
如果值公式得出的值是 -ve,我需要将值声明为 0。 我该怎么做,是在控制器中还是在域中?
我在 Controller 中试过了
@Transactional
def value() {
Asset asset = Asset.get(params.value)
if (params.value <= 0) {
params.value = 0
return
}
}
嗯!现在我无法尝试我给你的建议,但在 grails 文档中很好地说,公式使用持久性模型而不是对象模型,因此它也允许添加 hql 查询。
因此,您可以尝试使用 hql 查询 CASE
语句。
This blog很好地展示了使用hql的例子。
以下内容适合您的情况:
static mapping = {
yearNow formula: 'YEAR(purchase_date)'
yearlyValue formula: 'PURCHASE_AMOUNT / LIFE_EXPECTANCY'
value formula: 'CASE WHEN PURCHASE_AMOUNT / LIFE_EXPECTANCY * (LIFE_EXPECTANCY - (YEAR(NOW()) - YEAR(purchase_date))) <0 THEN PURCHASE_AMOUNT / LIFE_EXPECTANCY * (LIFE_EXPECTANCY - (YEAR(NOW()) - YEAR(purchase_date))) ELSE 0'
此外,另一个解决方案如果您不想对您的公式使用查找器或标准查询,是为瞬态 属性 并得到如下所示的预期值:
public double getValue(){
double value = 0.0d //calculate value here
return (value <0 ? 0 : value)
}
希望对您有所帮助!!
只需覆盖域内 value
的 getter 方法来检查 -ve 值。
public double getValue(){
value < 0 ? 0 : value
}
感谢帮助,答案是
value formula: 'GREATEST(PURCHASE_AMOUNT / LIFE_EXPECTANCY * (LIFE_EXPECTANCY - (YEAR(NOW()) - YEAR(purchase_date))), 0)'