1

如果列为空,是否可以在 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 可以为 null 不是一种选择
  • empsalary 上的验证器似乎在插入行时有效,但在数据获取时无效
  • 我们可以考虑在域上写 getEmpSalary() 方法并在那里执行检查,但是我们需要执行其他几个字段,因此尽量避免大量代码更改
4

3 回答 3

1

如果您希望从数据库中获取默认值而无需将任何内容编码到您的类中,我建议您更新它为空的每一行并将其设置为数据库中的 0。如果从另一个应用程序插入数据并且该应用程序允许空值,请在您的数据库列上放置一个“DEFAULT 0”。

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

于 2014-03-21T12:04:22.373 回答
0

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

于 2014-03-21T13:39:06.753 回答
0

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

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

请参阅此 SO 问题

于 2014-03-20T21:22:20.843 回答