Странная ошибка Oracle с Hibernate и CLOB - PullRequest
5 голосов
/ 05 июля 2011

Я столкнулся со следующей проблемой, которая кажется довольно обычной . Исключение составляет Cannot update entity: [...] nested exception is java.sql.BatchUpdateException: ORA-24816: Expanded non LONG bind data supplied after actual LONG or LOB column. Похоже, что Oracle не любит привязывать большие значения (> 4000 символов) к параметрам после LOB или CLOB. Кто-нибудь решил эту проблему?

Ответы [ 2 ]

9 голосов
/ 26 июля 2011

Это: ORA-24816
** Это ограничение, и переменные связывания LONG должны стоять последними в выражении.**

source: http://www.odi.ch/weblog/posting.php?posting=496

Решение: переименовав поля в модели спящего режима, чтобы столбец clob имел имя, которое появляется позже, чем столбец varchar2 при упорядочении по алфавиту ( Я поставил перед полем clob в классе java символ 'z' ), все работает нормально, потому что тогда параметр clob следует после параметра varchar в сборках запроса hibernate.

2 голосов
/ 09 мая 2014

Мы столкнулись с той же проблемой с Hibernate 3.2.1 и исправили ее, вставив сначала запись без CLOB, а затем обновив эту запись с помощью CLOB.

public class Employee{

    @Lob
    @Column
    private String description;

    //getters setters
}

String desc = emp.getDescription();
emp.setDescription(null);
session.save(entity);
session.flush();
session.evict(entity);

StringBuilder sb = new StringBuilder();
sb.append("update Employee set description:description");
Query updateQuery = session.createQuery(sb.toString());
updateQuery.setParameter("description", desc, Hibernate.STRING);
updateQuery.executeUpdate();

Если вы используете аннотации Hibernate, то нетспособ предсказать порядок столбцов в инструкции вставки.Это было исправлено в Hibernate v4.1.8.

https://hibernate.atlassian.net/browse/HHH-4635

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...