抓取行时的Grails验证



如果列为空,是否可以在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
   }
}
  • 由于现有的数据
  • 使empsalary为空为false不是一个选项
  • 在empsalary上的验证器似乎在插入行时工作,但在获取数据时不工作
  • 我们可以考虑在域上编写getEmpSalary()方法并在那里执行检查,但还有几个其他字段我们需要这样做,以避免大量的代码更改

如果您希望从数据库中获得默认值,而无需在类中编写任何代码,我建议您更新数据库中为空的每一行并将其设置为0。如果数据是从另一个应用程序插入的,并且该应用程序允许null值,则在数据库列上放置'DEFAULT 0'。

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

我认为你可以用HQL:

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

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

相关内容

  • 没有找到相关文章

最新更新