在grails版本3.3.11中获得验证错误,但在grails 2.0.1中未获得验证错误

时间:2020-06-22 18:30:07

标签: grails

在grails版本3.3.11中获得验证错误,但在grails 2.0.1中未获得

请在下面找到示例代码

//**Domain classes**

class Booking {
    String bookingtype;
    Patient patient
    static constraints = {
    }
}

class ContactDetails {
    String city
    String state
    String postCode

    static constraints = {
        city blank: false
        postCode blank: false
        state blank: false
    }
}

class Patient {
    String name;
    ContactDetails contactDetails

    static embedded = ['contactDetails']

    static constraints = {
        contactDetails nullable: true
    }
}


//**Controller**
class NewHomeController {

    def index() { }

    def createContactDetails(){
        def patient=new Patient()
        patient.name="Name"
        patient.contactDetails=new ContactDetails()
        patient.save(flush: true,deepValidate:false)
        def booking=new Booking()
        booking.bookingtype="Online"
        booking.patient=patient;
        booking.save(flush: true,failOnError: true)
        render "Done"
    }
}

如果我在grails 2.0.1中运行以上代码,则运行正常,但在grails 3.3.11中运行不正常。 如果我将对象保留为booking.save(flush:true,deepValidate:false),那么它将正常工作,因为它将忽略验证子关联。

从grails 2到grails 3,自动创建表没有区别

**Grails 3**
--------
CREATE TABLE `patient` (
   id` bigint(20) NOT NULL AUTO_INCREMENT,
   `version` bigint(20) NOT NULL,
   `name` varchar(255) NOT NULL,
   `contact_details_city` varchar(255) DEFAULT NULL,
   `contact_details_country` varchar(11) DEFAULT NULL,
   `contact_details_state` varchar(255) DEFAULT NULL,
   `contact_details_post_code` varchar(255) DEFAULT NULL,
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
 
 
 CREATE TABLE `contact_details` (
   `id` bigint(20) NOT NULL AUTO_INCREMENT,
   `version` bigint(20) NOT NULL,
   `city` varchar(255) NOT NULL,
   `country` varchar(11) NOT NULL,
   `state` varchar(255) NOT NULL,
   `post_code` varchar(255) NOT NULL,
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
 
 
 CREATE TABLE `booking` (
   `id` bigint(20) NOT NULL AUTO_INCREMENT,
   `version` bigint(20) NOT NULL,
   `patient_id` bigint(20) NOT NULL,
   `bookingtype` varchar(255) NOT NULL,
   PRIMARY KEY (`id`),
   KEY `FK1o2fk91av3dkwlxpexo94lcbg` (`patient_id`),
   CONSTRAINT `FK1o2fk91av3dkwlxpexo94lcbg` FOREIGN KEY (`patient_id`) REFERENCES `patient` (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
 
 
 
 **Grails 2**
 ---------
 
 
CREATE TABLE `patient` (
   `id` bigint(20) NOT NULL AUTO_INCREMENT,
   `version` bigint(20) NOT NULL,
   `contact_details_city` varchar(255) DEFAULT NULL,
   `contact_details_country` varchar(11) DEFAULT NULL,
   `contact_details_post_code` varchar(255) DEFAULT NULL,
   `contact_details_state` varchar(255) DEFAULT NULL,
   `name` varchar(255) NOT NULL,
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
 
 CREATE TABLE `contact_details` (
   `id` bigint(20) NOT NULL AUTO_INCREMENT,
   `version` bigint(20) NOT NULL,
   `city` varchar(255) NOT NULL,
   `country` varchar(11) NOT NULL,
   `post_code` varchar(255) NOT NULL,
   `state` varchar(255) NOT NULL,
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
 
 
 CREATE TABLE `booking` (
   `id` bigint(20) NOT NULL AUTO_INCREMENT,
   `version` bigint(20) NOT NULL,
   `bookingtype` va rchar(255) NOT NULL,
   `patient_id` bigint(20) NOT NULL,
   PRIMARY KEY (`id`),
   KEY `FK3DB0859F465DE24` (`patient_id`),
   CONSTRAINT `FK3DB0859F465DE24` FOREIGN KEY (`patient_id`) REFERENCES `patient` (`id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

我收到的验证异常是

Caused by: grails.validation.ValidationException: Validation Error(s) occurred during save():
- Field error in object 'domain_constraint_verification_3_3_11.Booking' on field 'patient.contactDetails.city': rejected value [null]; codes [domain_constraint_verification_3_3_11.ContactDetails.city.nullable.error.domain_constraint_verification_3_3_11.Booking.patient.contactDetails.city,domain_constraint_verification_3_3_11.ContactDetails.city.nullable.error.patient.contactDetails.city,domain_constraint_verification_3_3_11.ContactDetails.city.nullable.error.city,domain_constraint_verification_3_3_11.ContactDetails.city.nullable.error.java.lang.String,domain_constraint_verification_3_3_11.ContactDetails.city.nullable.error,contactDetails.city.nullable.error.domain_constraint_verification_3_3_11.Booking.patient.contactDetails.city,contactDetails.city.nullable.error.patient.contactDetails.city,contactDetails.city.nullable.error.city,contactDetails.city.nullable.error.java.lang.String,contactDetails.city.nullable.error,domain_constraint_verification_3_3_11.ContactDetails.city.nullable.domain_constraint_verification_3_3_11.Booking.patient.contactDetails.city,domain_constraint_verification_3_3_11.ContactDetails.city.nullable.patient.contactDetails.city,domain_constraint_verification_3_3_11.ContactDetails.city.nullable.city,domain_constraint_verification_3_3_11.ContactDetails.city.nullable.java.lang.String,domain_constraint_verification_3_3_11.ContactDetails.city.nullable,contactDetails.city.nullable.domain_constraint_verification_3_3_11.Booking.patient.contactDetails.city,contactDetails.city.nullable.patient.contactDetails.city,contactDetails.city.nullable.city,contactDetails.city.nullable.java.lang.String,contactDetails.city.nullable,nullable.domain_constraint_verification_3_3_11.Booking.patient.contactDetails.city,nullable.patient.contactDetails.city,nullable.city,nullable.java.lang.String,nullable]; arguments [city,class domain_constraint_verification_3_3_11.ContactDetails]; default message [Property [{0}] of class [{1}] cannot be null]
- Field error in object 'domain_constraint_verification_3_3_11.Booking' on field 'patient.contactDetails.state': rejected value [null]; codes [domain_constraint_verification_3_3_11.ContactDetails.state.nullable.error.domain_constraint_verification_3_3_11.Booking.patient.contactDetails.state,domain_constraint_verification_3_3_11.ContactDetails.state.nullable.error.patient.contactDetails.state,domain_constraint_verification_3_3_11.ContactDetails.state.nullable.error.state,domain_constraint_verification_3_3_11.ContactDetails.state.nullable.error.java.lang.String,domain_constraint_verification_3_3_11.ContactDetails.state.nullable.error,contactDetails.state.nullable.error.domain_constraint_verification_3_3_11.Booking.patient.contactDetails.state,contactDetails.state.nullable.error.patient.contactDetails.state,contactDetails.state.nullable.error.state,contactDetails.state.nullable.error.java.lang.String,contactDetails.state.nullable.error,domain_constraint_verification_3_3_11.ContactDetails.state.nullable.domain_constraint_verification_3_3_11.Booking.patient.contactDetails.state,domain_constraint_verification_3_3_11.ContactDetails.state.nullable.patient.contactDetails.state,domain_constraint_verification_3_3_11.ContactDetails.state.nullable.state,domain_constraint_verification_3_3_11.ContactDetails.state.nullable.java.lang.String,domain_constraint_verification_3_3_11.ContactDetails.state.nullable,contactDetails.state.nullable.domain_constraint_verification_3_3_11.Booking.patient.contactDetails.state,contactDetails.state.nullable.patient.contactDetails.state,contactDetails.state.nullable.state,contactDetails.state.nullable.java.lang.String,contactDetails.state.nullable,nullable.domain_constraint_verification_3_3_11.Booking.patient.contactDetails.state,nullable.patient.contactDetails.state,nullable.state,nullable.java.lang.String,nullable]; arguments [state,class domain_constraint_verification_3_3_11.ContactDetails]; default message [Property [{0}] of class [{1}] cannot be null]
- Field error in object 'domain_constraint_verification_3_3_11.Booking' on field 'patient.contactDetails.postCode': rejected value [null]; codes [domain_constraint_verification_3_3_11.ContactDetails.postCode.nullable.error.domain_constraint_verification_3_3_11.Booking.patient.contactDetails.postCode,domain_constraint_verification_3_3_11.ContactDetails.postCode.nullable.error.patient.contactDetails.postCode,domain_constraint_verification_3_3_11.ContactDetails.postCode.nullable.error.postCode,domain_constraint_verification_3_3_11.ContactDetails.postCode.nullable.error.java.lang.String,domain_constraint_verification_3_3_11.ContactDetails.postCode.nullable.error,contactDetails.postCode.nullable.error.domain_constraint_verification_3_3_11.Booking.patient.contactDetails.postCode,contactDetails.postCode.nullable.error.patient.contactDetails.postCode,contactDetails.postCode.nullable.error.postCode,contactDetails.postCode.nullable.error.java.lang.String,contactDetails.postCode.nullable.error,domain_constraint_verification_3_3_11.ContactDetails.postCode.nullable.domain_constraint_verification_3_3_11.Booking.patient.contactDetails.postCode,domain_constraint_verification_3_3_11.ContactDetails.postCode.nullable.patient.contactDetails.postCode,domain_constraint_verification_3_3_11.ContactDetails.postCode.nullable.postCode,domain_constraint_verification_3_3_11.ContactDetails.postCode.nullable.java.lang.String,domain_constraint_verification_3_3_11.ContactDetails.postCode.nullable,contactDetails.postCode.nullable.domain_constraint_verification_3_3_11.Booking.patient.contactDetails.postCode,contactDetails.postCode.nullable.patient.contactDetails.postCode,contactDetails.postCode.nullable.postCode,contactDetails.postCode.nullable.java.lang.String,contactDetails.postCode.nullable,nullable.domain_constraint_verification_3_3_11.Booking.patient.contactDetails.postCode,nullable.patient.contactDetails.postCode,nullable.postCode,nullable.java.lang.String,nullable]; arguments [postCode,class domain_constraint_verification_3_3_11.ContactDetails]; default message [Property [{0}] of class [{1}] cannot be null]

在最新的grails文档中找不到与验证相关的任何更新。 我想念什么吗?

1 个答案:

答案 0 :(得分:0)

我通过禁用深度验证来解决此问题,因为在较新版本的grails中,对深度验证进行了一些更新。

相关问题