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
  • 相关阅读:
    编码问题
    僵尸进程与孤儿进程
    进程理论 阻塞非阻塞 同步异步 I/O操作
    浏览器上网流程以及套接字介绍
    OSI七层模型
    JsonResponse返回中文乱码问题
    查看源码所在位置
    linux ssh登录的小知识
    centos7安装python3.6
    Jquery的使用
  • 原文地址:https://www.cnblogs.com/infoo/p/6403735.html
Copyright © 2011-2022 走看看