jpa级联操作详解1(cascade)

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} 申明级联级联保存

 

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值