1

列がnullの場合、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 を nullable false にすることは、既存のデータのためオプションではありません
  • empsalary のバリデーターは、行を挿入するときは機能するようですが、データをフェッチするときは機能しません
  • ドメインにgetEmpSalary()メソッドを記述してそこでチェックを実行することを検討できますが、これを行う必要がある他のフィールドがいくつかあるため、大規模なコード変更を回避しようとしています
4

3 に答える 3

1

クラスに何もコーディングせずにデフォルト値をデータベースから取得したい場合は、null であるすべての行を更新し、データベースで 0 に設定することをお勧めします。データが別のアプリケーションから挿入され、そのアプリケーションが NULL 値を許可している場合は、データベース列に「DEFAULT 0」を設定します。

Grails は、ドメイン オブジェクトがデータベースからロードされるときに実行される「afterLoad」イベントも提供します。http://grails.org/doc/2.3.7/guide/GORM.htmlのドキュメントを参照してください。

于 2014-03-21T12:04:22.373 に答える
0

HQLでこれを行うことができると思います:

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

この SO Questionを参照してください。

于 2014-03-20T21:22:20.843 に答える