【问题标题】:newInstance(map) for Grails domain classes?Grails 域类的 newInstance(map)?
【发布时间】:2012-11-08 08:15:09
【问题描述】:

Grails 注入了一个域类,其字段为id。用地图实例化这样的类会产生id == null

def obj = DomainClass.class.newInstance(id:100, name:'Joe')
assert obj.id != null // it fails

在 Grails 中分配所有隐藏属性的最佳做法是什么?

【问题讨论】:

    标签: grails groovy


    【解决方案1】:

    您可以自定义 GORM 如何使用 DSL 为数据库生成标识符。默认情况下,GORM 依赖于本地数据库机制来生成 id。查看customizes the way the identifier for a domain class is generated的文档。

    static mapping = {
        id generator: 'assigned'
    }
    

    在分配生成器时,构造函数上的 id 初始化存在一个错误,请查看此博客文章,其中包含此错误的临时解决方法: Assigning ID for domain objects in Grails via constructor.

    【讨论】:

    • 不是一个错误,它是故意的。它可以防止黑客向更新方法发送不同的 id 值。同样,versionclassmetaclass 默认被排除在外,以减少有意或错误地使用 thing.properties = params 之类的代码更改它们的可能性。如果对您的工作流程有意义,您仍然可以手动分配 ID。
    • 感谢您的澄清。我想说JIRA中有一个错误报告。
    猜你喜欢
    • 1970-01-01
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多