jpa级联操作详解1(cascade)

来源:互联网 发布:淘宝如何申请客服号 编辑:程序博客网 时间:2024/06/05 11:19
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")@Entitypublic 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@GeneratedValuepublic Long getId() {return id;}public void setId(Long id) {this.id = id;}@Columnpublic 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;}@Transientpublic 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")@Entitypublic 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@GeneratedValuepublic 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;}@Columnpublic 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;@Testpublic 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} 申明级联级联保存

                                             
0 0
原创粉丝点击