首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在grails中保存一对多与域相关的对象的最佳实践是什么?

在grails中保存一对多与域相关的对象的最佳实践是什么?
EN

Stack Overflow用户
提问于 2012-04-26 21:22:37
回答 4查看 928关注 0票数 2

在grail中保存一对多与域相关的对象的最佳实践是什么?让我们考虑一个场景。

如果您有两个类A和B以及A hasMany B relations和B belongsTo A,那么创建/保存/删除B域对象.As的最佳实践是什么?在许多情况下,在创建As时无法创建B对象。

谢谢

EN

回答 4

Stack Overflow用户

发布于 2012-04-26 21:29:48

在创建As时不能创建B对象。

我很确定那不是真的。Grails使用Hibernate,而Hibernate具有传递持久性的概念,这基本上是级联设置。默认情况下,Grails有一个save-update级联设置,这意味着如果您创建了一个新的父进程和一个新的子进程,并将该子进程添加到父进程中,那么当您保存父进程时,该子进程也将被保存。

没有“最佳实践”。您需要完全理解hibernate中的持久性语义,并选择对您有意义的配置。你想不想让孩子有自己的生命周期?您想要级联哪些操作?您希望关系是双向的还是不双向的,以及关系应该朝哪个方向发展?开发一个好的域层需要理解这些问题(以及其他类似的问题),以及答案对所需功能的影响。

票数 4
EN

Stack Overflow用户

发布于 2012-04-26 21:31:09

我不太确定你到底在问什么,但如果你问的是如何实例化和保存As和B,我会这样做:

代码语言:javascript
运行
复制
class B {
    String name
    static belongsTo=[a:A]
}

class A {
    static hasMany=[manyBs:B]
}

然后:

代码语言:javascript
运行
复制
def a=new A()
a.addToManyBs(name:'someB')
a.save()
票数 0
EN

Stack Overflow用户

发布于 2012-04-26 21:37:47

让我们将对象命名为Owner和Pet。初始化一个不带宠物的所有者对象,继续并保存,只是为了证明宠物不必同时创建。

代码语言:javascript
运行
复制
Owner owner = new Owner(pets: []).save()

现在我们可以向主人添加宠物了。我们可以用一只宠物就能做到:

代码语言:javascript
运行
复制
owner.pets.add(new Pet(name: "fido"))

或者我们可以使用宠物的集合:

代码语言:javascript
运行
复制
def petCollection = [
    new Pet(name: "Pete"),
    new Pet(name: "meow")
]
owner.pets.addAll(petCollection)
owner.save()

通过保存Owner对象,您将看到新创建的Pet对象也被持久化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10334345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档