双向一对多关系,一是关系维护端(owner side),多是关系被维护端(inverse side)的。在关系被维护端(inverse side)建立外键列指向关系关系维护端的主键列。
Order.java
@SuppressWarnings("serial")
@Entity
@Table(name = "Orders")
public class Order implements Serializable ...{
private Integer orderid;
private Float amount;
private Set<OrderItem> orderItems = new HashSet<OrderItem>();
private Date createdate;
@Id
@GeneratedValue 
public Integer getOrderid() ...{
return orderid;
}
public void setOrderid(Integer orderid) ...{
this.orderid = orderid;
}

public Float getAmount() ...{
return amount;
} 
public void setAmount(Float amount) ...{
this.amount = amount;
}
@OneToMany(mappedBy="order",cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@OrderBy(value = "id ASC")
public Set<OrderItem> getOrderItems() ...{
return orderItems;
}
public void setOrderItems(Set<OrderItem> orderItems) ...{
this.orderItems = orderItems;
}
@Temporal(value=TemporalType.TIMESTAMP)
public Date getCreatedate() ...{
return createdate;
}
public void setCreatedate(Date createdate) ...{
this.createdate = createdate;
}

public void addOrderItem(OrderItem orderitem) ...{
if (!this.orderItems.contains(orderitem)) ...{
this.orderItems.add(orderitem);
orderitem.setOrder(this);
}
}

public void removeOrderItem(OrderItem orderitem) ...{
orderitem.setOrder(null);
this.orderItems.remove(orderitem);
}
}
OrderItem.java
@SuppressWarnings("serial")
@Entity
@Table(name = "OrderItems")
public class OrderItem implements Serializable ...{
private Integer id;
private String productname;
private Float price;
private Order order;

public OrderItem() ...{
}

public OrderItem(String productname, Float price) ...{
this.productname = productname;
this.price = price;
}
@Id
@GeneratedValue 
public Integer getId() ...{
return id;
}
public void setId(Integer id) ...{
this.id = id;
}

public String getProductname() ...{
return productname;
}
public void setProductname(String productname) ...{
this.productname = productname;
}

public Float getPrice() ...{
return price;
}
public void setPrice(Float price) ...{
this.price = price;
}
@ManyToOne(cascade=CascadeType.REFRESH,optional=false)
@JoinColumn(name = "order_id") 
public Order getOrder() ...{
return order;
}
public void setOrder(Order order) ...{
this.order = order;
}
}
本文介绍了一个订单系统中订单(Order)与订单项(OrderItem)之间的双向一对多关系实现方式。通过Java实体类展示了如何在关系维护端(Order)设置集合属性来管理多个关系被维护端(OrderItem),并在OrderItem类中定义外键(order_id)来引用Order的主键。
1万+

被折叠的 条评论
为什么被折叠?



