2013-03-12 2 views
1

У меня есть таблица с java.sql.Clob колонки в спящемСохранение данных в CLOB с использованием Hibernate в Oracle 10g

hbm файл:

<class name="com.model.ClobModel" table="table1"> 
    <id name="id" column="id"> 
     <generator class="assigned"></generator> 
    </id> 
    <property name="clobData" type="clob"> 
     <column name="ClobData"></column> 
    </property> 

Это ClobModel:

private Integer id; 
public Integer getId() { 
    return id; 
} 

public void setId(Integer id) { 
    this.id = id; 
} 

private Clob clobData; 

public Clob getClobData() { 
    return clobData; 
} 

public void setClobData(Clob clobData) { 
    this.clobData = clobData; 
} 

Когда я попробовал это в спящий режим:

SessionFactory sf = new Configuration().configure("clob.cfg.xml").buildSessionFactory(); 
    Session sess = sf.openSession(); 

    ClobModel cb = new ClobModel(); 
    cb.setId(101); 
    try { 
       // getClobData() method returns String, trying to convert it into java.sql.Clob and then assign it to the model 
        cb.setClobData(new javax.sql.rowset.serial.SerialClob(new ClobInsert().getClobData().toCharArray())); 
    } catch (SerialException e) { 
     e.printStackTrace(); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 

    sess.save(cb); 
    sess.flush(); 
    System.out.println("Exit!!!"); 

Я получаю исключение:

javax.sql.rowset.serial.SerialClob cannot be cast to oracle.sql.CLOB 

Все Clob упомянутые выше типа java.sql.Clob.

Не знаете, как преобразовать String в java.sql.Clob?

ответ

4

Вам необходимо явно указать тип поля на java.sql.Clob.

<property 
    name="data" 
    type="java.sql.Clob" 
    update="true" 
    insert="true" 
    column="data" 
/> 
+0

получаю это исключение: 'java.lang.ClassCastException: javax.sql.rowset.serial.SerialClob не может быть приведен к oracle.sql.CLOB'. Пожалуйста, взгляните на преобразование String в CLOB в вышеприведенный код (который я использовал с помощью 'SerialClob'. Кажется, что это неверно :( – user182944

+0

Не используйте его, просто используйте' java.sql.Clob' и hibernate будет делать –

+0

ok, тогда эта строка покажет ошибку компиляции: 'cb.setClobData (new ClobInsert(). getClobData());' Здесь. getClobData возвращает 'String', но в модели setClobData ожидает' java. sql.Clob'. Пожалуйста, дайте мне знать, где еще можно изменить? Пожалуйста, помогите – user182944

Смежные вопросы