2

我正在使用 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 !!!

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

4

1 回答 1

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());
于 2012-11-08T17:34:23.693 回答