我有两个域名
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
绑定(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
都会为您提供所有域字段的映射。请注意,此方法适用于像
String
,boolean
,int
,Long
等原始类型,但是当域具有集合,一对多或多对多关系字段时,Grails可能会引发异常。