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_id
和 invoice_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]
}
您可以更改名称
items
和 invoices
随心所欲。所以当你创建上面的两个域类时,hibernate知道是多对多关系,它需要标准化 并会自动创建中间表:
invoiceitem
或 iteminvoice
其中将包含 invoice_id 和 item_id。要将项目添加到发票:
invoiceInstance.addToItems(itemInstance)
要将发票添加到项目:
itemInstance.addToInvoices(invoiceInstance)
关于grails - 建立一对多对一的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29115905/