【问题标题】:Grails: domain properties are mandatory by default and Id is not generatedGrails:域属性默认是强制的,不生成Id
【发布时间】:2015-03-10 03:26:21
【问题描述】:

我是 Grails 的新手。我安装了 Grails 2.4.4 版本和 Spring Tool Suite。 我创建了 Grails 项目和域、控制器类。但是我默认所有字段都是强制性的,并且不会生成“id”。需要一些帮助。

领域类:

package org.example.pomorodo

class Task {

String summary
String details
Date dateCreated
Date deadLine
Long timeSpent=0L 
    static constraints = {      
    }
}

控制器类: 包 org.example.pomorodo

class TaskController {
   static scaffold =Task
}

【问题讨论】:

    标签: grails-domain-class


    【解决方案1】:

    您的意思是在使用 GORM 保存域对象后无法访问“id”属性?或者只是生成的代码没有明确定义的“id”属性?如果是后者,请不要担心。 “id”属性是由框架通过元编程黑魔法自动注入的。如果是前者,那就是其他问题,因为您在保存域对象后肯定应该有一个有效的“id”。

    在必填字段上:使用约束块将字段切换为 nullable = true。示例:

    package org.example.pomorodo
    
    class Task {
    
    String summary
    String details
    Date dateCreated
    Date deadLine
    Long timeSpent=0L 
        static constraints = {      
           summary(nullable:true)
           details(nullable:true)
        }
    }
    

    您还可以全局修改默认约束。有关详细信息,请参阅constraints documentation

    【讨论】:

    • 非常感谢,这对您有帮助。
    【解决方案2】:

    最近我收到一个关于映射没有任何 id 和版本的数据库表的查询。例如,该表有两个 varchar 字段用户名和密码仅此而已。 虽然对我来说很奇怪,表没有 id 字段。好消息是用户名是表中的主键,这不是自动递增的,用户希望通过自己的方法创建它。 grails 的好处是,在大多数情况下,您可以在文档 http://grails.org/doc/latest/ 中获得答案。所以在这种情况下,我们只需要像这样更改 grails 域中的 id 字段

    类测试{ 字符串用户名 字符串密码

    static mapping = {
        id name: 'username'
        version false
        id generator: 'assigned'
    }
    static constraints = {
        username(nullable: true)
    }
    

    }

    【讨论】:

      猜你喜欢
      • 2011-05-09
      • 1970-01-01
      • 2016-08-14
      • 2011-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多