I have a grails application using hibernate.Under grails 1.3.7 everything works properly, but when I switch to grails 2.0.3 the following problem appears:
I can’t check for unique fields under java/src directory. If I try to add or update any record with the same unique key, batch insert error appears.
Under src/groovy I create a class to check validation:
Example: LanguageCommand.groovy
package myproject.command
import org.codehaus.groovy.grails.validation.Validateable;
@Validateable
class LanguageCommand {
String code
String codeDescription
static constraints= {
code(blank:false, maxSize:50)
codeDescription(maxSize:200)
}
}
and under src/java I create a class to check for unique fields
Example: LanguageConstraints.groovy
package myproject.model
constraints = {
code unique: true
}
where myproject.model is the name of the package that contains hibernate classes.
Note: Validation class works fine but the unique one not. i try to add unique constraints to validation class, same error appears
Error:
Error 500: Executing action [save] of controller
[myproject.controller.LanguageController]
caused exception: Runtime error executing action
Servlet: grails
URI: /myproject/grails/language/save.dispatch
Exception Message: Batch entry 0 insert into language
(language_code, code_description, version, id)
values (en, English, 0, 1) was aborted.
Call getNextException to see the cause.
Caused by: Batch entry 0 insert into language
(language_code, code_description, version, id)
values (en, English, 0, 1) was aborted.
Call getNextException to see the cause.
Class: LanguageController
At Line: [125]
Code Snippet:
Any help?
Under
src/groovyyou will create a LanguageCommand.groovy class:and in i18n/messages.properties you must write
(the message you want to display it):and in the controller in update method before check of validation you must write:
Note: oldCode is a used in update only not in create, we store in it the code before updating, because if we search language by the code without changing it it return a result, then when the code = equal old code i we didn’t search language by code.
hope this help you