zoukankan      html  css  js  c++  java
  • org.hibernate.AssertionFailure: null id 错误

    对象属性有Blob类型;

    而Blob需在输入流中读取;

    InputStream in = new FileInputStream(url.getFile());
    Blob bookPic = lobHelper.createBlob(in, in.available());
    book.setBookPic(bookPic);
    book2.setBookPic(bookPic);

    如对象bookPic第二次使用的时候以无法再从in 中读取信息,因此报错

    改进方法:
    重新获取一次in

    或使用 in.mark(int)与 in.reset() 但是FileInputStream流对象此方法无效

    因此可改用 BufferedInputStream

    如:
    LobHelper lobHelper = session.getLobHelper();
    InputStream in = new BufferedInputStream(new FileInputStream(this.getClass().getResource("/j.jpg").getFile()));
    //或用this.getClass(),getResourceAsStream();
    in.mark(in.available());
    Blob bookPic = lobHelper.createBlob(in, in.available());

    book.setBookPic(bookPic);
    //调用流的reset()
    in.reset();
    book2.setBookPic(bookPic);

    具体reset()  与mark(int)使用介绍可查看其它介绍

    因此在处理这类特殊对象的时候应由其要注意这种细节

    当然要是关闭流也应在save()之后,否则同样会报这样的错误
    By Ginfoo
  • 相关阅读:
    JS 给li标签下所有a标签添加点击事件并添加和删除样式
    Linux简介及常用命令
    简易计算器
    登陆窗口小项目
    时间工具类
    String类的常用方法(附带练习)
    java-自定义异常
    Java小练习
    Java-接口练习1
    动态加载js
  • 原文地址:https://www.cnblogs.com/infoo/p/6403735.html
Copyright © 2011-2022 走看看