java - Grails:删除所有关联的对象

标签 java grails associations grails-orm

可以使用我的应用程序中的 html select 元素来选择 m:n 关系的相关对象(也可以是复选框列表)。如果在编辑表单中取消选择所有相关对象,则应清除相关对象的对象列表。对于脚手架代码,仅当至少保留一个相关对象时,它才起作用。

示例:

class Book {
  String name
  static hasMany = [authors: Author]
  belongsTo = Author
}

class Author {
  String name
  static hasMany = [books: Book]
}

def b1 = new Book(name: "B1").save()
def b2 = new Book(name: "B2").save()
def author = new Author(name: "Stephen").addToBooks(b1).addToBooks(b2).save()

// How to remove all books from the author?

按照 Grails 文档,我将在所有相关对象的域对象上调用 removeFrom* (与 addTo* 相反)。但要做到这一点,我必须弄清楚哪些对象是相关的。有没有更简单的方法来清除相关对象的列表?如果相关对象列表简单地被空列表替换,双向关联是否可以正确处理?

最佳答案

我认为您可能遇到的问题是,当在选择框中或通过复选框选择该项目时,没有数据随 Controller 的请求返回。如果您希望能够从关联中删除所有对象,您需要向表单添加一个额外的隐藏字段。

例如,如果产品有多个类别,请添加以下内容:

<g:hiddenField name="categories" value=""/>

除了通常的选择

您可以为 Controller 编写测试,以确保所需的功能按预期运行。

关于java - Grails:删除所有关联的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4249660/

相关文章:

java - 如何快速查看RMI注册表?

java - 将自定义证书添加到 OkHttp 客户端

Java currentTimeMillis 返回负值)

grails - Grails 3用于grails.test.Mock的集成测试迁移Utils grails.test.Grails Mock

ruby-on-rails - rails 4 : How to use includes() with where() to retrieve associated objects

java - 我有 UTF-8 - 但仍然得到 "Invalid byte 1 of 1-byte UTF-8 sequence"

eclipse - Groovy:规范化期间的一般错误:无法运行org.grails.compiler.injection.GlobalGrailsClassInjectorTransformation

hibernate - Grails:如何使用具有sort属性的多对多关系来获取域对象的排序列表?

javascript - Sequelize "include"不工作白色多对多关系

orm - 关联(pivot、belongsToMany)中的 Sequelize Hook (afterCreate.afterUpdate)不起作用