grails - 如何使用其他域对象启动 Grails 域类

标签 grails groovy grails-orm grails-domain-class

我有两个域名

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 这样的对象绑定(bind)不是通过绑定(bind)每个单独的属性。

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

我怎样才能做到这一点?

最佳答案

干得好:

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为您提供所有域字段的 map 。

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

关于grails - 如何使用其他域对象启动 Grails 域类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57388610/

相关文章:

grails - 结构登录成功和失败功能

Grails GORM 从表中返回随机行?

grails - 如何在grails中使用左连接?

groovy - log4j 与 grails : How to get appender file name at run time?

线程 "Thread-8"BUG 中的 Grails/Gorm/异常!源单元中阶段 'semantic analysis' 中的异常

templates - Grails Tomcat 渲染 GSP 模板

grails - 我有一堆数据,我需要一个使用 Grails 的数据过滤器

select - Grails 3.2.2 从域约束中选择选项

grails - 域类复制 Grails 域实例的 clone() 的正确实现

hibernate - GORM IdentityEnumType 与 Grails 2.5.6 映射 NPE