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
  • 相关阅读:
    STL目录
    Hola!
    SWPUCTF 2019总结以及部分WP
    SQL手工注入基础篇
    JDK11,JDK12没有JRE的解决方法
    FJUT2019暑假周赛三部分题解
    FJUT2019暑假周赛一题解
    随笔1
    关于针对本校教务系统漏洞的一次信息检索
    KMP算法讲解
  • 原文地址:https://www.cnblogs.com/infoo/p/6403735.html
Copyright © 2011-2022 走看看