Spring 保存一个;订单“;对于数据库,order保存,但;订单行“;不要
因此,我有一个“订单”,其中包含诸如下订单的用户、下订单的日期、下订单的用户等信息。订单还包含“订单行”。我感觉在使用hibernate“保存”时,它也会保存“订单行”,但它只插入订单 Orders.javaSpring 保存一个;订单“;对于数据库,order保存,但;订单行“;不要,spring,hibernate,Spring,Hibernate,因此,我有一个“订单”,其中包含诸如下订单的用户、下订单的日期、下订单的用户等信息。订单还包含“订单行”。我感觉在使用hibernate“保存”时,它也会保存“订单行”,但它只插入订单 Orders.java @Entity public class Orders { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyToOne @JoinColumn(name = "user_id")
@Entity
public class Orders {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
Date date;
private double price;
private String address;
@OneToMany(mappedBy = "order")
private List<OrderLine> orderLines = new ArrayList<>();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public List<OrderLine> getOrderLines() {
return orderLines;
}
public void setOrderLines(List<OrderLine> orderLines) {
this.orderLines = orderLines;
}
}
}
OrderDAO.java
@Repository
public interface OrderDao extends CrudRepository<Orders,Long> {
Orders save(Orders order);
}
@存储库
公共接口OrderDao扩展了Crudepository{
订单保存(订单);
}
OrderController,第二个方法是被调用的相关方法
@Controller
public class OrderController {
@Autowired
private Cart cart;
@Autowired
private OrderService orderService;
@RequestMapping("/completeOrder")
public String completOrder() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if((auth instanceof AnonymousAuthenticationToken)){
//user isnt logged in already,cant complete order,redirect back to cart
return "redirect:/cart";
}
if(cart.getLines().size()==0){
//nothing in the cart,cant complete order,redirect to cart,
return "redirect:/cart";
}
return "completeOrder";
}
@RequestMapping(value = "/completeOrder/complete",method = RequestMethod.POST)
public String completOrderComplete(@RequestParam("address") String address, RedirectAttributes redirectAttributes) {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if((auth instanceof AnonymousAuthenticationToken)){
//user isnt logged in already,cant complete order,redirect back to cart
return "redirect:/cart";
}
if(cart.getLines().size()==0){
//nothing in the cart,cant complete order,redirect to cart,
return "redirect:/cart";
}
if(address.length()<10){
redirectAttributes.addFlashAttribute("flash",new FlashMessage("Address entered was too short", FlashMessage.Status.FAILURE));
return "redirect:/completeOrder";
}
//logged in user
User user = (User) auth.getPrincipal();
ArrayList<OrderLine> orderLines = new ArrayList<>();
ArrayList<CartLine> cartLines = (ArrayList<CartLine>) cart.getLines();
Orders order = new Orders();
order.setAddress(address);
order.setUser(user);
for(int i = 0;i<cartLines.size();i++){
OrderLine orderLine = new OrderLine();
orderLine.setProduct(cartLines.get(i).getProduct());
orderLine.setQuantity(cartLines.get(i).getQuantity());
orderLines.add(orderLine);
}
order.setOrderLines(orderLines);
order.setPrice(1000);
//get current date time
Date date = new Date();
order.setDate(date);
orderService.save(order);
return "/";
}
}
@控制器
公共类OrderController{
@自动连线
私家车;
@自动连线
私人订单服务;
@请求映射(“/completeOrder”)
公共字符串完成符(){
Authentication auth=SecurityContextHolder.getContext().getAuthentication();
if((匿名身份验证令牌的身份验证实例)){
//用户尚未登录,无法完成订单,重定向回购物车
返回“重定向:/cart”;
}
if(cart.getLines().size()==0){
//购物车中无任何内容,无法完成订单,重定向到购物车,
返回“重定向:/cart”;
}
返回“completeOrder”;
}
@RequestMapping(value=“/completeOrder/complete”,method=RequestMethod.POST)
公共字符串completOrderComplete(@RequestParam(“地址”)字符串地址,重定向属性重定向属性){
Authentication auth=SecurityContextHolder.getContext().getAuthentication();
if((匿名身份验证令牌的身份验证实例)){
//用户尚未登录,无法完成订单,重定向回购物车
返回“重定向:/cart”;
}
if(cart.getLines().size()==0){
//购物车中无任何内容,无法完成订单,重定向到购物车,
返回“重定向:/cart”;
}
如果(address.length()您需要在orderLines变量的定义中使用cascade属性,如下所示:
@OneToMany(mappedBy=“order”,cascade=CascadeType.PERSIST)
private List orderLines=new ArrayList()
您可以在中找到多个级联选项
.I添加了CascadeType.PERSIST,并且数据库中添加字段中表“ORDERLINE”的“ORDER\u ID”字段为空。您必须在创建ORDERLINE对象(ORDERLINE.setOrder(ORDER))的for循环中为每个ORDERLINE设置订单。
@Controller
public class OrderController {
@Autowired
private Cart cart;
@Autowired
private OrderService orderService;
@RequestMapping("/completeOrder")
public String completOrder() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if((auth instanceof AnonymousAuthenticationToken)){
//user isnt logged in already,cant complete order,redirect back to cart
return "redirect:/cart";
}
if(cart.getLines().size()==0){
//nothing in the cart,cant complete order,redirect to cart,
return "redirect:/cart";
}
return "completeOrder";
}
@RequestMapping(value = "/completeOrder/complete",method = RequestMethod.POST)
public String completOrderComplete(@RequestParam("address") String address, RedirectAttributes redirectAttributes) {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if((auth instanceof AnonymousAuthenticationToken)){
//user isnt logged in already,cant complete order,redirect back to cart
return "redirect:/cart";
}
if(cart.getLines().size()==0){
//nothing in the cart,cant complete order,redirect to cart,
return "redirect:/cart";
}
if(address.length()<10){
redirectAttributes.addFlashAttribute("flash",new FlashMessage("Address entered was too short", FlashMessage.Status.FAILURE));
return "redirect:/completeOrder";
}
//logged in user
User user = (User) auth.getPrincipal();
ArrayList<OrderLine> orderLines = new ArrayList<>();
ArrayList<CartLine> cartLines = (ArrayList<CartLine>) cart.getLines();
Orders order = new Orders();
order.setAddress(address);
order.setUser(user);
for(int i = 0;i<cartLines.size();i++){
OrderLine orderLine = new OrderLine();
orderLine.setProduct(cartLines.get(i).getProduct());
orderLine.setQuantity(cartLines.get(i).getQuantity());
orderLines.add(orderLine);
}
order.setOrderLines(orderLines);
order.setPrice(1000);
//get current date time
Date date = new Date();
order.setDate(date);
orderService.save(order);
return "/";
}
}