如何使用其他域对象启动 Grails 域 Class

How can i initiate a Grails Domain Class by using others Domain object

我有两个域名

class Book {

   String name
   Long id
}

class BookRef {

   String name
   Long id
   String refId
}

Booktable中,我存储了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()

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

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

我该怎么做?

给你:

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 可能会在域具有集合、一对多或具有多关系字段时抛出异常。