使用Hibernate和注释将两个表连接到中间表

时间:2012-10-26 08:20:05

标签: mysql spring hibernate

我需要连接3个表。

我的第一个项目是我自己创建数据库,同时学习一个新的框架,这可能有点令人困惑,因为当它归结为DB时我不是那么好。

我正在使用Spring 3.1.0.RELEASE和Hibernate 3.6.8.Final

我将在这里列出最重要的属性,以便大致了解我想在这里实现的目标。

  

广告资源(id,ItemName ...)

     

Line_Items (WORKSHOP_ORDERS_Id,INVENTORY_Id,数量)

     

Workshop_Order (Id,WorkshopService,WorkshopNotes ...)

这样我希望每个订单都有多个项目,计划为每个订单中的每个不同产品保留一个Line_Items,并通过FK将其链接到正确的订单。

我用我的注释尝试了不同的东西,我的persistence.xml工作,这是我的代码中唯一存在任何问题的地方。关于如何使用注释映射这种关系,我100%无能为力,所以我将在这里发布我的代码,即使它没有任何有用的地方(但我可能会得到一些指示)。

import java.io.Serializable;

import javax.persistence.*;

@Entity
@Table(name = "LINE_ITEMS")
public class LineItems implements Serializable {

private static final long serialVersionUID = 2414994088922470197L;

public Long workshopOrderId;
public Long inventoryId;
public int quantity;

public Workshop workshop;
public Inventory inventory;

@OneToMany(mappedBy = "workshop",cascade = CascadeType.ALL)
@JoinColumn(name="WORKSHOP_ORDERS_Id", insertable = false, updatable = false, nullable = false)
public Workshop getWorkshop() {
    return workshop;
}

@OneToMany(mappedBy = "inventory", cascade = CascadeType.ALL)
@JoinColumn(name="INVENTORY_Id", insertable = false, updatable = false, nullable = false)
public Inventory getInventory() {
    return inventory;
}

public void setWorkshop(Workshop workshop) {
    this.workshop = workshop;
}

public void setInventory(Inventory inventory) {
    this.inventory = inventory;
}

@Id
@Column(name = "WORKSHOP_ORDERS_Id")
public Long getWorkshopOrderId() {
    return workshopOrderId;
}

@Id
@Column(name = "INVENTORY_Id")
public Long getInventoryId() {
    return inventoryId;
}

@Column(name = "Quantity")
public int getQuantity() {
    return quantity;
}   

public void setWorkshopOrderId(Long workshopOrderId) {
    this.workshopOrderId = workshopOrderId;
}

public void setInventoryId(Long inventoryId) {
    this.inventoryId = inventoryId;
}

public void setQuantity(int quantity) {
    this.quantity = quantity;
}

}

我听过一些关于Hibernate中的错误的讨论,但不确定这是否与我的问题有关。

基本上我需要的不是问题的完整解决方案,而是对我正在做什么以及我应该做些什么来纠正它的一些想法。我很乐意在智能数据库设计方面提供一些帮助(关于我已经展示的表格,以及在Hibernate中执行它的正确方法)。

任何建议或帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

根据您在下面给出的表格的描述是关系。

Assumtpions:
- Many line_item is connected to one WorkshopOrder
- Many Line_items can be connected to same inventory

Line_Items (WORKSHOP_ORDERS_Id, INVENTORY_Id, Quantity)
                   |               |
                   |            ManyToOne
                 ManyToOne          |
                   |             Inventory (id, ItemName...)
                   |
                  Workshop_Order (Id, WorkshopService, WorkshopNotes...)

目前在您实体中您使用的是OneToMany,但是一对多表示一个项目可以有多个订单,因此订单将成为集合。那似乎不对。

编辑:项目与项目之间的编辑关系按照评论,将MANYTOONE安装在ONETOONE的工作室。

LineItems.java

  @ManyToOne
  WorkshopOrder w;

  @ManyToOne
  Inventory i;

WorkshopOrder.java

  @OneToMany
   List<LineItems> items;

Inventory.java

  @OneTOMany
   List<LineItems> items;