java - 使用 getCharacterStream API 读取 Clob 对象导致 "java.sql.SQLException: could not reset reader"

标签 java hibernate clob

我正在使用 Hibernate 3.6.10 版本并在保存记录(学生)后尝试读取 Clob 数据类型。抛出错误“无法重置阅读器”

 public class Student implements java.io.Serializable {

    private long studentId;
    private String studentName;
    private Address studentAddress;
    private Clob searchProfileText;

在测试时...首先我保存了一条学生记录,然后尝试再次从该记录中获取 searchProfileText,如下所示

1        student1.setSearchProfileText(clob);
2       session.save(student1);
3        System.out.println("Reading Clob : " + student1.getSearchProfileText().getCharacterStream());

第 3 行,出现以下异常

java.sql.SQLException: could not reset reader
at org.hibernate.engine.jdbc.ClobProxy.resetIfNeeded(ClobProxy.java:178)

我尝试了 session.flush(); 然后使用下面的代码重新加载数据,仍然是同样的错误:

session.flush();
session.get(Student.class, student1.getStudentId());
System.out.println("Reading Clob : " + student1.getSearchProfileText().getCharacterStream());

观察 2:

即使我使用 Hibernate 条件获取包含 CLOB 数据的记录并对 CLOB 列施加限制,我也无法在获取记录后访问 CLOB 数据。我认为,这是 3.6.10 Final 中的一个 BUG!!!

请帮助消除这个错误。我已经尝试了所有与此相关的主题,但还没有成功:(

最佳答案

由于您正在从 同一对象实例 读取 getSearchProfileText 对象,因此无法这样做,因为指针在设置值后位于末尾。我认为您需要在阅读之前重新加载对象,例如

    Serializable  id = session.save(student1);
    //commit the transaction
    Student student = session.get(Student.class, id);
    System.out.println("Reading Clob :: " 
                           + student.getSearchProfileText().getCharacterStream());

关于java - 使用 getCharacterStream API 读取 Clob 对象导致 "java.sql.SQLException: could not reset reader",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13294373/

相关文章:

java - 如何将 CLOB 转换为图像,反之亦然?

java - 如何消除回文中的空格(Java)

java - 输出文本不会显示任何内容/无法访问类?

hibernate - 大对象不能用于自动提交模式

java - hibernate 中的 ID 类型

Java:使用 Hibernate 合并实例与 Oracle CLOB 数据

sql - 如何使用 Oracle 中的 AL32UTF 字符集确定 CLOB 的长度(以字节为单位)?

java - 方法不适用于有关 Java 中泛型或类型删除的参数

java - 接受来自服务器套接字上客户端的多个连接

java - 由 : org. hibernate.QueryException 引起:无法解析属性: