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} 申明级联级联保存
相关文章推荐
- CascadeView级联组件实现思路详解(分离思想和单链表)
- ajax+jQuery实现级联显示地址的方法
- jquery无限级联下拉菜单简单实例演示
- JQuery实现级联下拉框效果实例讲解
- jQuery级联操作绑定事件实例
- Oracle数据库中的级联查询、级联删除、级联更新操作教程
- Hibernate Oracle sequence的使用技巧
- jsp Hibernate批量更新和批量删除处理代码
- jsp hibernate的分页代码第1/3页
- java省市级联下拉菜单实例代码
- Struts2+Hibernate实现数据分页的方法
- Hibernate环境搭建与配置方法(Hello world配置文件版)
- JAVA+Hibernate 无限级分类
- SSH整合中 hibernate托管给Spring得到SessionFactory
- jsp hibernate 数据保存操作的原理
- hibernate中的增删改查实现代码
- javascript级联下拉列表实例代码(自写)
- 解决hibernate+mysql写入数据库乱码
- jsp dwr级联效果代码
- java优化hibernate性能的几点建议