grails - 建立一对多对一的关系

标签 grails grails-orm

class Invoice {
   static hasMany = [invoiceItem: InvoiceItem]
}

class InvoiceItem {
   static belongsTo = [invoice: Invoice, item: Item]
   static constraints = {
       invoice(nullable: false)
       item(nullable: false)
   }
}

class Item {
   String name
   static hasMany = [invoiceItem: InvoiceItem]
}

假设我已经创建了一个发票,我不确定如何创建一个新项目并将其添加到发票中。

我刚在想:
Item item1 = new Item(name: "Banana")
InvoiceItem ii = new InvoiceItem(item_id: item1.id)
invoice.addToInvoiceItem(ii);

但这似乎不起作用。任何帮助,将不胜感激 :)

最佳答案

我真的不明白你的评论“应该只有一张发票和一个项目,但有很多 InvoiceItems。”。

我认为该声明无效,因为 invoiceitem表将有两列( item_idinvoice_id )所以一列 item和一个 invoice您将只有一个 invoiceitem行,除非您想在 invoiceitem 中有重复的行,因此无效。

所以基本上你需要中间表invoiceitem表示您在 invoice 之间存在多对多关系和 item .

在 Grails 中,您可以这样做,很简单:

class Invoice {
   static belongsTo = [item: Item]
   static hasMany = [items: Item]
}


class Item {
   String name
   static belongsTo = [invoice: Invoice]
   static hasMany = [invoices: Invoice]
}

您可以更改名称itemsinvoices随心所欲。

所以当你创建上面的两个域类时,hibernate知道是多对多关系,它需要标准化 并会自动创建中间表:invoiceitemiteminvoice其中将包含 invoice_id 和 item_id。

要将项目添加到发票:
invoiceInstance.addToItems(itemInstance)

要将发票添加到项目:
itemInstance.addToInvoices(invoiceInstance)

关于grails - 建立一对多对一的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29115905/

相关文章:

ajax - 用于查找最新条目的 GORM 查询

hibernate - 一对多关联的 Grails Hql 查询

grails - Grails 中的分页

grails - Grails params.controller错误

git - Intellij Grails和Git

grails - 运行 grails 应用程序时出错

java - Grails 属于,我应该吗?

hibernate - Grails 更新 2.3.11-> 2.4.3 ClassNotFoundException : org. hibernate.cache.access.AccessType

database - Grails 一对一查询选项

jquery - 如何使用Grails文件夹中的jQuery API获取数据?