我有两个域名

class Book {

   String name
   Long id
}

class BookRef {

   String name
   Long id
   String refId
}

Book表中,我存储了id=1name='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绑定(bind)这样的book对象而不是通过绑定(bind)每个单独的属性来初始化params对象。

现在,我现在已经使用该属性进行属性初始化,但是在具有各种属性的域中,这非常耗时。

我怎样才能做到这一点?

最佳答案

干得好:

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可能会引发异常。

09-09 19:37