/**
* 关系被维护端
* @author Administrator
*
*/
@Entity
@Table(name="orders")
public class Order {
private String orderid;
private Float amount;
private Set<OrderItem> orderitem=new HashSet<OrderItem>();
@Id
public String getOrderid() {
return orderid;
}
@Column(nullable=false)
public Float getAmount() {
return amount;
}
public void setAmount(Float amount) {
this.amount = amount;
}
/**
* 在关系维护中,多的一方为关系维护端,关系维护端负责外键记录的更新。关系被维护端则没有权利更新外键
* 的记录。
* @return
*/
//当注解以Many结尾时且需要关系维护,那么fetch的默认值为延迟加载;为One时,默认为立即加载。
//mappedBy(与hibernate中的inverse意思相同,表示对方,所以mappedBy出现在关系被维护端)出现在关系被维护端中,表示关系被维护端在关系维护端中的属性。
@OneToMany(cascade={CascadeType.ALL},fetch=FetchType.LAZY,mappedBy="order")
public Set<OrderItem> getOrderitem() {
return orderitem;
}
public void setOrderitem(Set<OrderItem> orderitem) {
this.orderitem = orderitem;
}
/**
* 添加订单项 由于Order是关系被维护端,因此不能更新外键的,外键维护必须是OrderItem
* @param orderItem
*/
public void addOrderItem(OrderItem orderItem){
orderItem.setOrder(this); //一定要有这条语句,它是维护外键。
orderitem.add(orderItem);
}
}
@Entity
public class OrderItem {
private Integer id;
private String productname;
private Float price=0f;
private Order order;
/**
* optional表示是否可选,如果为true,则为可选就是可以为null。如果为false,则为不可选就是不能为空
* @JoinColumn(name="order_id"):表示外键的注解,name属性表示外键的名称
*/
@ManyToOne(cascade={CascadeType.MERGE,CascadeType.REFRESH},optional=false)
@JoinColumn(name="order_id")
public Order getOrder() {
return order;
}
@Id @GeneratedValue
public Integer getId() {
return id;
}
@Column(length=40,nullable=false)
public String getProductname() {
return productname;
}
@Column(nullable=false)
public Float getPrice() {
return price;
}
}