【问题标题】:How can i initiate a Grails Domain Class by using others Domain object如何使用其他域对象启动 Grails 域类
【发布时间】:2019-08-07 06:59:46
【问题描述】:

我有两个域名

class Book {

   String name
   Long id
}

class BookRef {

   String name
   Long id
   String refId
}

Book 表中,我存储了id=1name='Java' 等数据。 现在我可以通过获取Book 来启动BookRef,如下所示

def book = Book.get(1)

def bookref = new BookRef()
bookref.id = book.id
bookref.name = book.name
bookref.refId = '1'
bookref.save()

但我想通过使用book 对象(如params 绑定而不是通过绑定每个单独的属性)来启动bookref 对象。

目前,我已经使用属性来初始化属性,但是在具有各种属性的域中,这很耗时。

我该怎么做?

【问题讨论】:

    标签: grails groovy grails-orm grails-domain-class


    【解决方案1】:

    给你:

    Book book = Book.get(1)
    
    // Option 1
    BookRef bookref = new BookRef(book.properties)
    bookref.refId = '1'
    bookref.save()
    
    // Option 2
    BookRef bookref = new BookRef()
    bookref.properties = book.properties
    bookref.refId = '1'
    bookref.save()
    
    

    基本上,在 Grails 中,任何domainInstance.properties 都会为您提供所有域字段的映射。

    请注意,这种方法适用于 StringbooleanintLong 等原始类型,但 Grails 可能会在域有集合时抛出异常,一个-to-many 或 has-many 关系字段。

    【讨论】:

    • 亲爱的Shashank,感谢您的回答。我现在已经使用属性来初始化属性,但是在具有大量属性的域中,这很耗时。有任何其他方式来启动两个域的相同属性。
    • 这就是我的回答,Shishir。您可以使用.properties并将其绑定到不同的域(只要字段相同)。
    猜你喜欢
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多