获取行时的grails验证

时间:2014-03-20 21:09:28

标签: grails grails-domain-class grails-validation

如果列为空,是否可以在grails中获取默认值?如果我通过grails域对象表示以下查询,那么我该如何实现它:

SELECT IFNULL(empsalary,0.00) from Employee;

域对象:

class Employee{
   Integer id,
   Float empsalary

   static constraints = {
      id unique: true, blank:false
      empsalary nullable:true
   }
}
  • 由于现有数据
  • ,使得empalalary nullable false不是一个选项
  • empator上的验证器似乎在插入行时有效,但在数据提取时却不起作用
  • 我们可以考虑在域上编写说getEmpSalary()方法并在那里执行检查,但我们需要执行其他几个字段,以避免大量代码更改

3 个答案:

答案 0 :(得分:1)

如果你想要一个默认值来自数据库而不必在你的类中编写任何代码,我建议你更新它为null的每一行并在数据库中将它设置为0。如果从另一个应用程序插入数据并且该应用程序允许空值,则在数据库列上放置“DEFAULT 0”。

Grails还提供了一个“afterLoad”事件,该事件在从数据库加载域对象时运行。请参阅此处的文档:http://grails.org/doc/2.3.7/guide/GORM.html

答案 1 :(得分:0)

我认为你可以用HQL做到这一点:

def salary = Employee.executeQuery('SELECT COALESCE(empsalary, 0.0) FROM Employee')[0]

请参阅this SO Question

答案 2 :(得分:0)

请尝试在您的域对象中设置Float empsalary = 0.0