利用springboot級聯儲存子表資料
阿新 • • 發佈:2018-11-22
前言:有兩個表order和item,資料庫模型如下:
sql:
/* Navicat MySQL Data Transfer Source Server : lalala Source Server Version : 50720 Source Host : localhost:3306 Source Database : test Target Server Type : MYSQL Target Server Version : 50720 File Encoding : 65001 Date: 2018-07-05 17:10:13 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for item -- ---------------------------- DROP TABLE IF EXISTS `item`; CREATE TABLE `item` ( `id` int(11) NOT NULL, `content` varchar(255) DEFAULT NULL, `order_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `fk_item_order_01` (`order_id`), CONSTRAINT `fk_item_order_01` FOREIGN KEY (`order_id`) REFERENCES `order` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- ---------------------------- -- Table structure for order -- ---------------------------- DROP TABLE IF EXISTS `order`; CREATE TABLE `order` ( `id` int(11) NOT NULL, `content` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
order與item是一對多的關係
package com.test.domain; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table; import com.fasterxml.jackson.annotation.JsonInclude; @Entity @Table(name = "order") @JsonInclude(JsonInclude.Include.NON_NULL) public class Order { private Integer id; private String content; private Set<Item> item = new HashSet<>(); @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(unique = true, nullable = false) public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } @OneToMany(cascade = CascadeType.ALL, mappedBy = "order") public Set<Item> getItem() { return item; } public void setItem(Set<Item> item) { this.item = item; } public void create(Order order){ this.content = order.content; this.item = order.item; } }
package com.test.domain; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; import com.fasterxml.jackson.annotation.JsonInclude; @Entity @Table(name = "item") @JsonInclude(JsonInclude.Include.NON_NULL) public class Item { private Integer id; private String content; private Order order; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(unique = true, nullable = false) public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } @ManyToOne @JoinColumn(name = "order_id") public Order getOrder() { return order; } public void setOrder(Order order) { this.order = order; } public void create(Order order) { this.order = order; } }
達到效果:在儲存order的時候一併將item儲存,而且item裡面的外來鍵要有值。
@PostMapping
public Result<Void> addOrder(@RequestBody College input) {
Order order= new Order();
//將主表的主鍵存放到子表的外來鍵中 關鍵點
for(Item item : input.getItem()) {
item.create(order);
}
order.create(input);
orderRepository.save(order);
return Result.success();
}
如此即可!