Hibernate/Spring boot:当我更新产品时,我成功更新了我想修改的变量,但图像消失了(类型为 blob) [英] Hibernate / Spring boot: when I update a product, I successfully update the variable I want to modify but the image disappears (which is of type blob)

查看:11
本文介绍了Hibernate/Spring boot:当我更新产品时,我成功更新了我想修改的变量,但图像消失了(类型为 blob)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试通过仅更改名称来更新 Postman 中的产品;执行此操作时,名称已成功更新,但我注意到之前插入对象时保存的产品照片(blob 类型)消失了(自动设置为 null).
我该如何解决这个问题?
谢谢大家

I am trying to update a product in Postman by changing only the name; when I do this, the name is updated successfully but I notice that the product photo (blob type) that was previously saved when the object was inserted disappears (it is automatically set to null).
How can I solve this problem?
Thank you all

Product.java

Product.java

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Table;

import Model.Product;

@Entity
@Table(name="product")
public class Product {
    @Id
    private String prodcode; 
    private String name; 
    
    @Lob
      private byte[] photo;

      public Product() {
      }

      public Product(String prodcode, String name, byte[] photo) {
        this.prodcode = prodcode;
        this.name = name;
        this.photo = photo;
      }

    public String getProdcode() {
        return prodcode;
    }

    public void setProdcode(String prodcode) {
        this.prodcode = prodcode;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public byte[] getPhoto() {
        return photo;
    }

    public void setPhoto(byte[] photo) {
        this.photo = photo;
    }

Product_DAO_Imp.java

Product_DAO_Imp.java

package DAO;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.query.Query;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;


import Model.Product;

@Repository
public class Product_DAO_Imp  implements Product_DAO{

    @Autowired
    private SessionFactory sessionFactory;
    
    @Override
    public boolean updateProduct(Product product) {
        boolean status=false;
        try {
            sessionFactory.getCurrentSession().update(product);
            status=true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return status;
    }
  
  // ....
  // ....
  // ....

    

}

Product_Service_Imp

Product_Service_Imp

package Service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;

import DAO.Product_DAO;
import Model.Product;

@Service
@Transactional
public class Product_Service_Imp implements Product_Service {
 
    @Autowired
    private Product_DAO productdao;
    
    @Override
    public boolean updateProduct(Product product) {
        return productdao.updateProduct(product);
    }
  
  // ....
  // ....
  // ....

    
}

控制器.java

import java.io.IOException;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import Model.Product;
import Service.Product_Service;

@RestController
@CrossOrigin(origins="http://localhost:4200")
@RequestMapping(value="/api")
public class Controller {
    
    @Autowired
    private Product_Service productservice;
    
    @PostMapping("update-product/{prodcode}")
    public boolean updateProduct(@RequestBody Product product,@PathVariable("prodcode") String prodcode) {
        product.setProdcode(prodcode);
        return productservice.updateProduct(product);
    }
  
  // ....
  // ....
  // ....
    
}

推荐答案

你可以按照加载和保存方法来做你想要的

You can follow load and save approach to do the desired

按照以下步骤

  1. 使用 prodcode
  2. 从数据库读取行
  3. 更新上述读取对象中的字段并更新

您可以在 Product_DAO_Imp.java 中更新以下方法

You can update the below method in the your Product_DAO_Imp.java

@Override
public boolean updateProduct(Product product) {
    boolean status=false;
    try {
        Product productFrmDb = sessionFactory.getCurrentSession().get(Product.class,product.getProdcode());
        productFrmDb.setName(product.getName());
        sessionFactory.getCurrentSession().update(productFrmDb);
        status=true;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return status;
}

这篇关于Hibernate/Spring boot:当我更新产品时,我成功更新了我想修改的变量,但图像消失了(类型为 blob)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆