网址 - 字符串,双精度或其他内容

时间:2017-10-31 06:37:27

标签: java spring hibernate

在春天,冬眠和百里香项目上工作。我正在尝试将类别图像与数据库中的主项目链接,该数据库将附加项目的图像。我认为我需要做的是在我的服务文件夹中创建一个类别java类,一个类别存储库java接口和一个categoryServiceImpl实现java类。但这对我来说听起来不对。我试图在我的merchandise.java文件中添加一个额外的MultipartFile categoryImage,并将以下代码添加到我的控制器

Merchandise.java

@Entity
public class Merchandise {
	
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private Long id;
	private String title;
	private String size;
	private String format;
	private String screenSize;
	private String category;
	private double shippingWeight;
	private double listPrice;
	private double salePrice;
	private boolean active=true;
	
	@Column(columnDefinition="text")
	private String description;
	private int inStockNumber;
	
	@Transient
	private MultipartFile merchImage;
    private MultipartFile categoryImage;

控制器

@RequestMapping(value = "/add", method = RequestMethod.POST)
public String addMerchandisePost(
  @ModelAttribute("merchandise") Merchandise merchandise, HttpServletRequest request) {
  merchandiseService.save(merchandise);

  MultipartFile merchImage = merchandise.getMerchImage();

  try {
    byte[] bytes = merchImage.getBytes();
    String name = merchandise.getId() + ".jpg";
    BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(new File("src/main/resources/static/image/merch/" + name)));
    stream.write(bytes);
    stream.close();
  } catch (Exception e) {
    e.printStackTrace();
  }

  MultipartFile categoryImage = merchandise.getCategoryImage();

  try {
    byte[] bytes = categoryImage.getBytes();
    String name = merchandise.getId() + ".jpg";
    BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(new File("src/main/resources/static/image/category/" + name)));
    stream.write(bytes);
    stream.close();
  } catch (Exception e) {
    e.printStackTrace();
  }

  return "redirect:merchandiseList";
}

但那没用。我最终得到了异常:在类路径资源中定义名为'entityManagerFactory'的bean时出错。我不知所措。

hiarachy

2 个答案:

答案 0 :(得分:0)

不要使用Web内容 - MultipartFile和实体。在实体中应该有Blob字段或byte [] wchih可以存储在DB中并检索回来。但实际上你根本不需要它。存储一个字符串 - 文件的路径。

不要使用实体来获取控制器中的数据。而是创建一个DTO(数据传输对象)一个普通的旧java对象,其中包含您需要从UI传递的所有字段。

BTW 异常:使用名称' entityManagerFactory'创建bean时出错类路径资源中定义的与发布的代码完全无关。你的弹簧配置有点不对劲。

发布完整的堆栈跟踪和你的弹簧配置以说明更多信息。

答案 1 :(得分:0)

与其他答案一样,它不适合将图像作为blob存储在DB中,而是存储在文件系统中的文件中,只是将该文件的路径存储为DB中的元数据。 至于你的错误,你需要在spring config类中配置multipart bean,即实现WebMvcConfigurerAdapter的类

放下以下定义

// Bean name must be "multipartResolver", by default Spring uses method name
    // as bean name.
    @Bean
    public MultipartResolver multipartResolver() {
        return new StandardServletMultipartResolver();
    }

添加以下导入

import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.support.StandardServletMultipartResolver;