您的位置:首页 > 其它

jpa级联操作详解1(cascade)

2016-06-08 16:10 543 查看
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} 申明级联级联保存



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hibernate jpa 级联