如何使用其他域对象初始化Grails域类

如何使用其他域对象初始化Grails域类,grails,groovy,gorm,grails-domain-class,Grails,Groovy,Gorm,Grails Domain Class,我有两个域名 class Book { String name Long id } class BookRef { String name Long id String refId } 在Book表中,我存储了像id=1,name='Java'这样的数据。 现在我可以通过像下面这样获取Book来启动BookRef def book = Book.get(1) def bookref = new BookRef() bookref.id = book.id

我有两个域名

class Book {

   String name
   Long id
}

class BookRef {

   String name
   Long id
   String refId
}
Book
表中,我存储了像
id=1
name='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
对象

现在,我已经使用了属性到属性初始化,但是在一个具有各种属性的域中,这非常耗时

我该怎么做?

给你:

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

这里:

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可能会抛出异常。

亲爱的Shashank,谢谢您的回答。我现在已经使用了属性到属性的初始化,但是在一个具有巨大属性的域中,这非常耗时。有没有其他方法来启动两个域的相同属性。这就是我的回答,Shishir。您可以使用
.properties
并将其绑定到不同的域(只要域相同)。亲爱的Shashank,感谢您的回答。我现在已经使用了属性到属性的初始化,但是在一个具有巨大属性的域中,这非常耗时。有没有其他方法来启动两个域的相同属性。这就是我的回答,Shishir。您可以使用
.properties
并将其绑定到不同的域(只要字段相同)。