单向一对多关系

/**
 * 关系被维护端
 * @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;
 }
}
原文地址:https://www.cnblogs.com/lbangel/p/3022778.html