【问题标题】:creating a grails domain class from its class name从其类名创建一个 grails 域类
【发布时间】:2026-02-08 00:00:02
【问题描述】:

我正在尝试使用Class.forName('com.mypack.MyDomain').newInstance() 从其限定名称创建 grails 域的实例。 但它抛出了一个ClassNotFoundException. 我认为这是因为 .forName('') 期望该类是 java 类而不是 groovy 类? 如何在 grails 中使其工作,或者是否有另一种方法可以从 String 格式的类名创建域对象。

谢谢 普里扬克

【问题讨论】:

    标签: grails reflection groovy


    【解决方案1】:

    另一条尝试的方法是:

    GrailsDomainClass dc = grailsApplication.getDomainClass( 'com.mypack.MyDomain' )
    def newDomainObject = dc.clazz.newInstance()
    

    【讨论】:

    • 如何传递域的 ID 并从数据库表中获取特定的域对象?就像我会做的那样,User user = User.get(id);
    • Afaik, dc.get( id ) 应该是你所需要的
    • 感谢.. 的帮助...几乎全部完成...最后一个问题是我得到 domain.dirtPropertNames.each{.. //如何从字符串中获取属性值列表中的值?因为 domain.it 显然不起作用..
    • 有没有办法投newDomainObject
    【解决方案2】:

    试试

    GrailsClass clazz =  grailsApplication.getArtefactByLogicalPropertyName(DomainClassArtefactHandler.TYPE, className)
    clazz.clazz.newInstance()
    

    【讨论】:

    • 所以我又得到了一个 GrailsClass 类型的对象?
    • 不,试一试 - 这将是您的域类类型的对象。您传递给 getArtefactByLogicalPropertyName 的类名