使用getCharacterStream API读取Clob对象会导致“java.sql.SQLException:无法重置读取器”

时间:2012-11-08 17:25:53

标签: 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。

请帮助摆脱这个错误..我已尝试过所有相关主题但尚未成功:(

1 个答案:

答案 0 :(得分:0)

由于您正在从getSearchProfileText读取same object instance对象,因此无法执行此操作,因为在设置值后指针位于末尾。我认为您需要在阅读之前重新加载对象,例如。

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