Order类: package lesson6; import java.io.Serializable; import java.util.HashSet; import java.util.Date; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.OrderBy; import javax.persistence.Table; @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.EAGER) @OrderBy(value = "id ASC") public Set<OrderItem> getOrderItems() { return orderItems; } public void setOrderItems(Set<OrderItem> orderItems) { this.orderItems = orderItems; } 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类: package lesson6; import java.io.Serializable; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; @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(strategy=GenerationType.AUTO) 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.PERSIST,optional=false) @JoinColumn(name = "order_id") public Order getOrder() { return order; } public void setOrder(Order order) { this.order = order; } } Dao类: s package lesson6; import java.util.Date; import java.util.List; import javax.ejb.Remote; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; @Stateless @Remote ({OrderDAO.class}) public class OrderDAOBean implements OrderDAO { @PersistenceContext protected EntityManager em; public void insertOrder(){ Order order = new Order(); order.setCreatedate(new Date()); order.addOrderItem(new OrderItem("笔记本电脑", new Float(10000))); order.addOrderItem(new OrderItem("U盘", new Float(550))); order.setAmount(new Float(10000+550)); em.persist(order); } public Order getOrderByID(Integer orderid) { Order order = em.find(Order.class, orderid); order.getOrderItems().size(); //因为是延迟加载,通过执行size()这种方式获取订单下的所有订单项 return order; } public List getAllOrder() { Query query = em.createQuery("from Order"); List result = query.getResultList(); return result; } public void deleteItem(Integer id) { OrderItem it = em.find(OrderItem.class, id); Order o = it.getOrder(); o.getOrderItems().remove(it); it.setOrder(null); em.remove(it); } }