繁体   English   中英

将一个到多个域关联对象保存在grails中的最佳实践是什么?

[英]What is the best practice to save the one to many domain associated objects in grails?

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

如果您有两个类A和B,并且A具有很多B关系,并且B属属于A,那么创建/保存/删除B域对象的最佳实践是什么。在许多情况下,创建As时无法创建B对象。

谢谢

创建As时,不可能创建B对象。

我敢肯定那不是真的。 Grails使用Hibernate,而Hibernate具有传递持久性的概念,这基本上是级联设置。 默认情况下,Grails的层叠设置为save-update ,这意味着如果创建一个新的父级和一个新的子级,并将该子级添加到该父级中,则在保存父级时,应保存该子级。

没有“最佳实践”。 您需要完全了解hibernate中的持久化语义,然后选择对您有意义的配置。 您是否希望孩子有自己的生命周期? 您要级联哪些操作? 您是否希望该关系是双向的,关系应该走哪条路? 开发良好的领域层需要理解这些问题(以及其他类似问题),以及答案对您所需功能的影响。

我不太确定您要问的是什么,但是如果您要问如何实例化和保存A和B,我会这样做:

class B {
    String name
    static belongsTo=[a:A]
}

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

然后:

def a=new A()
a.addToManyBs(name:'someB')
a.save()

我们将对象称为Owner和Pet。 初始化一个没有宠物的所有者对象,然后继续保存,只是为了演示不必同时创建宠物。

Owner owner = new Owner(pets: []).save()

现在我们可以将宠物添加到所有者。 我们可以用一只宠物做到这一点:

owner.pets.add(new Pet(name: "fido"))

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

def petCollection = [
    new Pet(name: "Pete"),
    new Pet(name: "meow")
]
owner.pets.addAll(petCollection)
owner.save()

通过保存Owner对象,您将看到新创建的Pet对象也将保留下来。

您需要在域的约束部分中提供nullable true。 即静态约束{可为null:true}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM