首页 > 解决方案 > 如何使用其他域对象启动 Grails 域类

问题描述

我有两个域名

class Book {

   String name
   Long id
}

class BookRef {

   String name
   Long id
   String refId
}

Book表中,我存储了id=1,等数据name='Java'BookRef现在我可以Book像下面这样开始

def book = Book.get(1)

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

但我想bookref通过使用bookparams绑定这样的对象来启动对象,而不是通过绑定每个单独的属性。

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

我怎样才能做到这一点?

标签: grailsgroovygrails-ormgrails-domain-class

解决方案


干得好:

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 中,anydomainInstance.properties为您提供了所有域字段的映射。

请注意,这种方法适用于 , , 等原始类型Stringboolean但是intLong域具有集合、一对多或具有多关系字段时,Grails 可能会抛出异常。


推荐阅读