看到了许多此类问题,尽管在我的情况下没有一个真正的答案。我正在制作一个简单的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": []
}
]
}
答案 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,但其中包含值。听说可以用某种视图对象对它进行清洁,尽管我不知道如何使用它。