为什么只有部分信息上载到数据库?

时间:2019-12-15 02:03:56

标签: mysql spring rest spring-boot

看到了许多此类问题,尽管在我的情况下没有一个真正的答案。我正在制作一个简单的Spring Boot服务器,它应该像酒的存储一样工作。我剩下的电话之一是接订单,将其写入db并更新产品。我设法按顺序编写了正确的部分,尽管即使没有错误迹象,我的产品也没有变化(另一个rest调用与更新产品并可以正常工作的部分几乎在相同的代码上运行) 。我没有主意,但是我的假设是查询是错误的,也就是说我仍然找不到错误的确切原因。

这是我的一些代码:

控制器:

@RequestMapping(method = RequestMethod.PUT, value = "/new")
public void newOrder(@RequestBody Orders order) {
    orderService.newOrder(order);
}

服务实施:

@Override
public void newOrder(Orders order) {
    for (Product product : order.getProduct()) {
        productRepository.orderProducts(product.getId(), product.getAmount());
    }
    Orders newOrder = new Orders(
            order.getProduct());
   ordersRepository.save(newOrder);
}

产品存储库:

@Modifying
@Query("update Product p set p.amount = (p.amount - :amount) where p.id = :id")
void orderProducts(int id, int amount);

订单实体:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;

@CreationTimestamp
private Timestamp date;

@ManyToMany(mappedBy = "orders")
private List<Product> product;

产品实体:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;

private String brandName;

private int price;

private int mass;

private int alcohol;

@Lob
private byte[] picture;

private int amount;

@ManyToMany
private List<Orders> orders;

剩下的我请邮递员

{

    "product": [

        {
    "id": 1,
    "brandName": "pivo",
    "price": 23,
    "mass": 1,
    "alcohol": 47,
    "amount": 123,
    "orders": []
},
{
    "id": 2,
    "brandName": "pivo",
    "price": 23,
    "mass": 1,
    "alcohol": 47,
    "picture": null,
    "amount": 58,
    "orders": []
}   

        ]
}

2 个答案:

答案 0 :(得分:0)

我认为您错过了value批注中的@Query属性。

将查询更改为此:

@Query( value = "update Product p set p.amount = (p.amount - :amount) where p.id = :id")

答案 1 :(得分:0)

终于发现了错误。似乎它一直说id为0,因此可能由于@GeneratedValue而无法更新数据库。我添加了另一个变量,基本上是另一个id,但其中包含值。听说可以用某种视图对象对它进行清洁,尽管我不知道如何使用它。