package com.sfec.bravo.order.domain;
import java.io.Serializable;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;
import com.sfec.bravo.account.domain.Account;
import com.sfec.bravo.account.util.DateUtil;
/**
*
* 订单类
*
*
* */
@Table(name = "bravo_order")
@Entity
public class Order implements Serializable {
private static final long serialVersionUID = 8026905445690161406L;
private Long id;
private Date orderTime;
private Account account;
private OrderStatus status;
private float donation;
private float price;
private float platFees;
private float increasePrice;
private float orderPrice;
private int orderDm;
private int orderNum;
private String orderNo;
private Date timeEnd;
private String payInfo;
private String bankType;
private String transactionId;
private Date udpateTime;
private String logisticsCompany;
private String logisticsNo;
private String receiverInfo;
private Set<OrderItem> items = new HashSet<OrderItem>();
@SuppressWarnings("unused")
private String orderTimeDesc;
public Order() {
}
@Id
@GeneratedValue
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Column
public Date getOrderTime() {
return orderTime;
}
public void setOrderTime(Date orderTime) {
this.orderTime = orderTime;
}
@ManyToOne(fetch = FetchType.LAZY)
public Account getAccount() {
return account;
}
public void setAccount(Account account) {
this.account = account;
}
@Enumerated(EnumType.ORDINAL)
@Column(nullable = true)
public OrderStatus getStatus() {
return status;
}
public void setStatus(OrderStatus status) {
this.status = status;
}
public float getDonation() {
return donation;
}
public void setDonation(float donation) {
this.donation = donation;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public float getPlatFees() {
return platFees;
}
public void setPlatFees(float platFees) {
this.platFees = platFees;
}
public float getIncreasePrice() {
return increasePrice;
}
public void setIncreasePrice(float increasePrice) {
this.increasePrice = increasePrice;
}
public float getOrderPrice() {
return orderPrice;
}
public void setOrderPrice(float orderPrice) {
this.orderPrice = orderPrice;
}
public void setOrderPrice(int orderPrice) {
this.orderPrice = orderPrice;
}
public int getOrderDm() {
return orderDm;
}
public void setOrderDm(int orderDm) {
this.orderDm = orderDm;
}
public int getOrderNum() {
return orderNum;
}
public void setOrderNum(int orderNum) {
this.orderNum = orderNum;
}
public String getOrderNo() {
return orderNo;
}
public void setOrderNo(String orderNo) {
this.orderNo = orderNo;
}
public Date getTimeEnd() {
return timeEnd;
}
public void setTimeEnd(Date timeEnd) {
this.timeEnd = timeEnd;
}
public String getPayInfo() {
return payInfo;
}
public void setPayInfo(String payInfo) {
this.payInfo = payInfo;
}
public String getBankType() {
return bankType;
}
public void setBankType(String bankType) {
this.bankType = bankType;
}
public String getTransactionId() {
return transactionId;
}
public void setTransactionId(String transactionId) {
this.transactionId = transactionId;
}
@Transient
public String getOrderTimeDesc() {
Date orderDate = getOrderTime();
String pattern = "yyyy-MM-dd HH:mm";
String orderDateDesc = DateUtil.formateDateToString(orderDate, pattern);
return orderDateDesc;
}
public void setOrderTimeDesc(String orderTimeDesc) {
this.orderTimeDesc = orderTimeDesc;
}
public Date getUdpateTime() {
return udpateTime;
}
public void setUdpateTime(Date udpateTime) {
this.udpateTime = udpateTime;
}
public String getReceiverInfo() {
return receiverInfo;
}
public void setReceiverInfo(String receiverInfo) {
this.receiverInfo = receiverInfo;
}
public String getLogisticsCompany() {
return logisticsCompany;
}
public void setLogisticsCompany(String logisticsCompany) {
this.logisticsCompany = logisticsCompany;
}
public String getLogisticsNo() {
return logisticsNo;
}
public void setLogisticsNo(String logisticsNo) {
this.logisticsNo = logisticsNo;
}
@OneToMany(cascade = { CascadeType.PERSIST }, mappedBy = "order")
public Set<OrderItem> getItems() {
return items;
}
public void setItems(Set<OrderItem> items) {
this.items = items;
}
public void addOrderItem(OrderItem orderItem) {
orderItem.setOrder(this);
this.items.add(orderItem);
}
}
package com.sfec.bravo.order.domain;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import com.sfec.bravo.product.domain.Product;
/**
*
* 订单项
*
* */
@Table(name = "bravo_orderitem")
@Entity
public class OrderItem implements Serializable {
private static final long serialVersionUID = 9188363186137518983L;
private Long id;
private Order order;
private Product products;
private BuyType buyType;
private int buyNum;
public OrderItem() {
}
@Id
@GeneratedValue
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@ManyToOne(fetch = FetchType.LAZY)
public Order getOrder() {
return order;
}
public void setOrder(Order order) {
this.order = order;
}
@ManyToOne(fetch = FetchType.LAZY)
public Product getProducts() {
return products;
}
public void setProducts(Product products) {
this.products = products;
}
@Column(nullable = true)
@Enumerated(EnumType.ORDINAL)
public BuyType getBuyType() {
return buyType;
}
public void setBuyType(BuyType buyType) {
this.buyType = buyType;
}
@Column
public int getBuyNum() {
return buyNum;
}
public void setBuyNum(int buyNum) {
this.buyNum = buyNum;
}
}
<pre name="code" class="java">package com.sfec.bravo.account;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.sfec.bravo.order.domain.Order;
import com.sfec.bravo.order.domain.OrderItem;
import com.sfec.bravo.order.service.OrderService;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = com.sfec.ModuleTestStarter.class)
@ActiveProfiles("test")
public class OrderServiceTest {
@Autowired
OrderService orderService;
@Test
public void testRepo() {
Order order = new Order();
order.setOrderDm(3);
order.setOrderNum(1445893421);
OrderItem itme1 = new OrderItem();
itme1.setBuyNum(7);
OrderItem itme2 = new OrderItem();
itme2.setBuyNum(2);
order.addOrderItem(itme1);
order.addOrderItem(itme2);
orderService.saveOrder(order);
}
}
运行上面测试用例,发现控制台如下打印语句:
insert into bravo_order (account_id, bank_type, donation, increase_price, logistics_company, logistics_no, order_dm, order_no, order_num, order_price, order_time, pay_info, plat_fees, price, receiver_info, status, time_end, transaction_id, udpate_time) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
insert into bravo_orderitem (buy_num, buy_type, order_id, products_id) values (?, ?, ?, ?)
insert into bravo_orderitem (buy_num, buy_type, order_id, products_id) values (?, ?, ?, ?)
查看数据库中数据,order表中多一条记录,orderitem表中多两条记录,完全符合我们的需求。
观察程序发现,这里我们并没有显示保存orderitem,但是orderitem已经插入数据库中,这是因为我们在Order类中添加了cascade={CascadeType.PERSIST} 申明级联级联保存