grails - 如何使用其他域对象启动 Grails 域类
问题描述
我有两个域名
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
通过使用book
像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 中,anydomainInstance.properties
为您提供了所有域字段的映射。
请注意,这种方法适用于 , , 等原始类型String
,boolean
但是int
当Long
域具有集合、一对多或具有多关系字段时,Grails 可能会抛出异常。
推荐阅读
- php - 为什么我在我的本地主机上得到未定义的变量或索引,而不是我的实时服务器?
- sql - 比较 Oracle 中的 2 个列表
- python - 如何修复标签数量与样本数量不匹配?
- php - 将点击事件附加到表格单元格的最佳方式是什么?
- python - Userid not found in seperate file's list
- c# - 如何正确停止计时器
- javascript - I am getting an unexpected error when trying to write a Javascript object
- javascript - 如何按属性值从对象列表中创建嵌套对象
- excel - How can I delete cookies and temporary Internet files when I do web scraping with VBA
- django - 什么是具有灵活性的良好 DRF 串行器设计