【问题标题】:Why does only part of information get uploaded into databse?为什么只有部分信息上传到数据库?
【发布时间】:2020-04-07 23:25:22
【问题描述】:

看到很多此类问题,但在我的案例中没有一个真正得到回答。我正在制作一个简单的弹簧启动服务器,它应该像酒的存储一样工作。我的休息电话之一是接受订单,将其写入数据库并更新产品。我设法按顺序正确编写了部分,尽管即使没有错误迹象,我的产品也没有变化(另一个休息调用在与更新产品的部分几乎相同的代码上运行并且工作正常) .我没有想法,但我的假设是查询是错误的,也就是说我仍然找不到究竟是什么错误。

这是我的一些代码:

控制器:

@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": []
}   

        ]
}

【问题讨论】:

    标签: mysql spring rest spring-boot


    【解决方案1】:

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

    将您的查询更改为:

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

    【讨论】:

    • 没有必要这样做。如果您只配置一个属性,则假定为value 属性。
    • 试过了,没有任何改变。
    • 没什么,一切都保持不变。
    • 抱歉,回复晚了,但如果我正确理解了这里的问题,服务器在失败后会写出什么:ibb.co/12hNqc1
    • 我认为查询工作正常。!确保您的参数在 db 中更新。
    【解决方案2】:

    终于发现了错误。似乎它一直说 id 是 0,所以它可能因为@GeneratedValue 而无法更新数据库。我添加了另一个变量,它基本上是另一个 id,但其中包含值。听说它可以用某种视图对象处理得更干净,虽然我不知道如何使用它。

    【讨论】:

      猜你喜欢
      • 2011-02-25
      • 2011-01-09
      • 2016-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-10
      相关资源
      最近更新 更多