如果列为空,是否可以在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