2015-04-18 40 views
1

我必須讓Hibernate實體滿足以下要求。 我很困惑在Order和OrderLine表之間的關係。目前,我正在假設訂單(一)訂單行(多)關係,但不確定。Hibernate中的Order和OrderLine關係映射。在哪裏放@OnetoMany和/或@ManytoOne

package com.prax.dto; 

import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.ManyToOne; 

@Entity(name="ORDERLINE") 
public class OrderLine { 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    @Column(name="ORDER_ID") 
    private String orderId; 

    @Column(name="PRODUCT_ID") 
    private String product; 

    @Column(name="UNITPRICE") 
    private double unitPrice; 

    @Column(name="TOTALPRICE") 
    private double totalPrice; 

    @Column(name="QUANTITY") 
    private int quantity; 

    @ManyToOne(cascade=CascadeType.ALL) 
    @JoinColumn(name="ORDER_ID", nullable=false) 
    private SalesOrder salesOrderMap; 

    public OrderLine(){} 

    public String getOrderId() { 
     return orderId; 
    } 

    public void setOrderId(String orderId) { 
     this.orderId = orderId; 
    } 

    public String getProduct() { 
     return product; 
    } 

    public void setProduct(String product) { 
     this.product = product; 
    } 

    public double getUnitPrice() { 
     return unitPrice; 
    } 

    public void setUnitPrice(double unitPrice) { 
     this.unitPrice = unitPrice; 
    } 

    public double getTotalPrice() { 
     return totalPrice; 
    } 

    public void setTotalPrice(double totalPrice) { 
     this.totalPrice = totalPrice; 
    } 

    public int getQuantity() { 
     return quantity; 
    } 

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

    public SalesOrder getSalesOrderMap() { 
     return salesOrderMap; 
    } 

    public void setSalesOrderMap(SalesOrder salesOrderMap) { 
     this.salesOrderMap = salesOrderMap; 
    } 

    @Override 
    public String toString() { 
     return "OrderLine [orderId=" + orderId + ", product=" + product 
       + ", unitPrice=" + unitPrice + ", totalPrice=" + totalPrice 
       + ", quantity=" + quantity + ", salesOrderMap=" + salesOrderMap 
       + "]"; 
    } 
} 
package com.prax.dto; 
import java.util.List; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.OneToMany; 
import javax.persistence.Table; 

@Entity 
@Table(name="SALESORDER") 
public class SalesOrder { 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    @Column(name="ORDER_ID") 
    private String orderNumber; 

    @Column(name="CUSTOMER_ID") 
    private String customer; 

    @Column(name="TOTALPRICE") 
    private double totalPrice; 

    @OneToMany(mappedBy="salesOrderMap") 
    private List<OrderLine> orderLines; 

    public String getOrderNumber() { 
     return orderNumber; 
    } 

    public void setOrderNumber(String orderNumber) { 
     this.orderNumber = orderNumber; 
    } 

    public String getCustomer() { 
     return customer; 
    } 

    public void setCustomer(String customer) { 
     this.customer = customer; 
    } 

    public double getTotalPrice() { 
     return totalPrice; 
    } 

    public void setTotalPrice(double totalPrice) { 
     this.totalPrice = totalPrice; 
    } 

    public List<OrderLine> getOrderLines() { 
     return orderLines; 
    } 

    public void setOrderLines(List<OrderLine> orderLines) { 
     this.orderLines = orderLines; 
    } 

    @Override 
    public String toString() { 
     return "SalesOrder [orderNumber=" + orderNumber + ", customer=" 
       + customer + ", totalPrice=" + totalPrice + ", orderLines=" 
       + orderLines + "]"; 
    } 
} 

我SalesOrder類

import java.util.List; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.OneToMany; 
import javax.persistence.Table; 

@Entity 
@Table(name="SALESORDER") 
public class SalesOrder { 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    @Column(name="ORDER_ID") 
    private String orderNumber; 

    @Column(name="CUSTOMER_ID") 
    private String customer; 

    @Column(name="TOTALPRICE") 
    private double totalPrice; 

    @OneToMany(mappedBy="salesOrderMap") 
    private List<OrderLine> orderLines; 

    public String getOrderNumber() { 
     return orderNumber; 
    } 

    public void setOrderNumber(String orderNumber) { 
     this.orderNumber = orderNumber; 
    } 

    public String getCustomer() { 
     return customer; 
    } 

    public void setCustomer(String customer) { 
     this.customer = customer; 
    } 

    public double getTotalPrice() { 
     return totalPrice; 
    } 

    public void setTotalPrice(double totalPrice) { 
     this.totalPrice = totalPrice; 
    } 

    public List<OrderLine> getOrderLines() { 
     return orderLines; 
    } 

    public void setOrderLines(List<OrderLine> orderLines) { 
     this.orderLines = orderLines; 
    } 

    @Override 
    public String toString() { 
     return "SalesOrder [orderNumber=" + orderNumber + ", customer=" 
       + customer + ", totalPrice=" + totalPrice + ", orderLines=" 
       + orderLines + "]"; 
    } 
} 

我得到異常下面

在實體映射

重複列:com.prax.dto.OrderLine柱:ORDER_ID(應insert="false"update="false"映射)

回答

1

訂單有許多行。 LINE表中的列ORDER_ID是連接列。因此,訂單42的所有行在它們的ORDER_ID列中都包含42。這是對的。

但是你也在說Hibernate這個相同的ORDER_ID列構成了OrderLine的ID。所以,OrderLine應該由ORDER_ID唯一標識。這顯然是不可能的。您需要另一個ID列,以便唯一標識一條線。

相關問題