不确定如何构建这个问题,但我看到一些我无法解释的行为......任何帮助都将受到高度赞赏。我有一个超类Form
和子类DraftForm
。超类对属性content(blank: false)
的约束比子类content(nullable: true)
更严格,我正在使用tablePerHierarchy false
。域类如下。
class Form { String content static constraints = { content(blank: false) } static mapping = { tablePerHierarchy false } }
class DraftForm extends Form { static constraints = { content(nullable: true) } }
使用上述域模型,以下测试*通过*没有任何问题。
class DraftFormIntegrationSpec extends Specification { void "Testing a draft-form and a form derived from a draft-form"(){ given: "A draft-form with invalid form-fields" // 1 def draftForm = new DraftForm() when: "The draft-form is validated" // 2 assert draftForm.validate() == true then: "The draft-form has no error" // 3 !draftForm.hasErrors() when: "The draft-form is saved" // 4 try{ draftForm.save() }catch(Exception e){ println "Exception thrown!" println e.class } then: "The draft-form is not found in the database" // 5 draftForm.id == null when: "The draft-form is casted to a form" // 6 Form form = (Form) draftForm assert form.validate() == true then: "The form validates, and has no error" // 7 !form.hasErrors() } }
以下是我的问题:
content
是null
(请参阅测试中的// 2和// 3),草稿表单如何验证正常并且没有错误?
DraftForm
类型转换为Form
时,它仍然可以正常验证并且没有错误(// 6和// 7),即使content
}属性仍为null
。这怎么可能?
感谢您的帮助!
答案 0 :(得分:0)
请在下面找到答案
根据Grails doc https://grails.github.io/grails-doc/3.0.x/guide/GORM.html>继承策略
tablePerHierarchy:false 会在数据库级别的表单表中对内容应用NOT-NULL约束,因此在保存时会出现异常表单对象 NULL不允许列“CONTENT”。
希望这能让你更好地理解事物。