Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 保存一个;订单“;对于数据库,order保存,但;订单行“;不要_Spring_Hibernate - Fatal编程技术网

Spring 保存一个;订单“;对于数据库,order保存,但;订单行“;不要

Spring 保存一个;订单“;对于数据库,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")

因此,我有一个“订单”,其中包含诸如下订单的用户、下订单的日期、下订单的用户等信息。订单还包含“订单行”。我感觉在使用hibernate“保存”时,它也会保存“订单行”,但它只插入订单

Orders.java

@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 "/";
}


}