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
  • 相关阅读:
    mysql索引、group by、explain、insert delayed
    mysql学习笔记
    Handler
    文件操作
    RatingBar
    ListView(二)
    文件管理函数的草稿
    SAX解析XML
    phpunit
    Service(一)
  • 原文地址:https://www.cnblogs.com/infoo/p/6403735.html
Copyright © 2011-2022 走看看