Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can i set default value in grails domain class

Tags:

grails

Is there any way to set a default value to domain class property? I have a class called PayMethod, where I want the name property to default to "Cash" and I want this default value when I create this table, is this possible using Constraints?

package abc  import util.UserUtil import embed.AuditUser  class PayMethod {      String name = "Cash"      AuditUser audit = new AuditUser()     static embedded = ['audit']          static constraints = {         name blank: false, size: 5..30, unique: true     }      static mapping = {         table 't01i0010'         id column: 'F_ID', precision: 4, scale: 0         name column: 'F_NAME', length: 30, defaultValue: 'Cash'         version column: 'F_REVISION'     }      def authUserService     int insertIndex = 0     int updateIndex = 0     static transients = ['authUserService', 'insertIndex', 'updateIndex']          def beforeInsert = {         audit.entryUser = UserUtil.user()         audit.entryDate = new Date();     }      def beforeUpdate = {         audit.reviseUser = UserUtil.user()         audit.reviseDate = new Date();     }      def afterInsert = {         if(insertIndex == 0){             def user = audit.entryUser             def date = audit.entryDate             log.info "POST INSERT => ENTERER: ${user} ENTERED: ${date}"         }         insertIndex++     }      def afterUpdate = {         if(updateIndex == 0){             def user = audit.reviseUser             def date = audit.reviseDate             log.info "POST UPDATE => REVISE: ${user} REVISED: ${date}"         }         updateIndex++     } } 
like image 910
Omar Faruq Avatar asked Nov 27 '12 04:11

Omar Faruq


2 Answers

This will be possible in 2.2 which should be released this week or next. See http://jira.grails.org/browse/GRAILS-5520 for the relevant feature request. The syntax will be

static mapping = {    name defaultValue: "'Cash'" } 

For now you'll need to do what you're doing - set the value as the default value of the field. You can manually update the database schema, or do the work as part of a migration.

like image 131
Burt Beckwith Avatar answered Sep 21 '22 13:09

Burt Beckwith


To build on the previous answer, you can use the defaultValue attribute in Grails 2.2 but you need to be careful to put double and single quotes around default values for String properties and double quotes around integer properties so that the default values appear correctly in the DDL. So, for instance, you need to use:

static mapping = {    myStringProperty defaultValue: "'Cash'"    myIntProperty defaultValue: "0" } 

If you only use single quotes, you will end up with an error like "Column "CASH" not found" Also, as far as I can tell, default values do not work for properties that are enums.

like image 21
Ed OConnor-Giles Avatar answered Sep 21 '22 13:09

Ed OConnor-Giles