Hibernate softdelete - индекс столбца вне диапазона исключений при мягком удалении

1

Я получаю следующее исключение при мягком удалении. Я не уверен, где ошибка? Может ли кто-нибудь помочь мне в этом. заранее спасибо

    org.springframework.dao.DataIntegrityViolationException: could not delete: [com.ItemResponse#47379632]; SQL [UPDATE fs_item_response SET deleted = '1' WHERE itemresponseid = ?]; nested exception is org.hibernate.exception.DataException: could not delete: [com.ItemResponse#47379632]        
    Caused by: org.postgresql.util.PSQLException: The column index is out of range: 2, number of columns: 1.
    at org.postgresql.core.v3.SimpleParameterList.bind(SimpleParameterList.java:53)
    at org.postgresql.core.v3.SimpleParameterList.setLiteralParameter(SimpleParameterList.java:114)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.bindLiteral(AbstractJdbc2Statement.java:2176)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.setInt(AbstractJdbc2Statement.java:1214)
    at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.setInt(NewProxyPreparedStatement.java:677)
    at org.hibernate.type.IntegerType.set(IntegerType.java:64)
    at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:154)
    at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:136)
    at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2521)
    ... 80 more
    <hibernate-mapping>
    <class name="com.DataResponse" dynamic-insert="true"
        dynamic-update="true" table="response" where="deleted != 1">
    <id name="id" column="dataresponseid" type="long"
            unsaved-value="-1">
            <generator class="seqhilo">
                <param name="max_lo">1</param>
                <param name="sequence">dataresponse_seq</param>
            </generator>
        </id>           
        <version name="version" column="version"
            type="java.lang.Integer" unsaved-value="null" />            
        <property name="deleted" type="long"  >
            <column name="deleted" default="0"/>
        </property>
        <property name="textResponse" type="java.lang.String"
            update="true" insert="true" column="textresponse" />
        <many-to-one name="dataDetail" class="com.DataDetail" cascade="none" update="true" insert="true" foreign-key="fk_datadetail_datadetailid" column="datadetailid" not-null="true" />
                <sql-delete>UPDATE response SET deleted = '1' WHERE dataresponseid = ?</sql-delete>
    </class>
    </hibernate-mapping>
Теги:
hibernate
exception

3 ответа

4
Лучший ответ

Внутренне, когда запрос на удаление выдается на версированных объектах, кажется, что Hibernate также передает номер версии в качестве второго параметра. Поэтому вам нужно изменить оператор SQLDelete, чтобы принять параметр версии.

Ex.

UPDATE response SET deleted = '1' WHERE itemresponseid = ? AND version = ?
  • 0
    Спасибо! Вы мне очень помогли!
0

Вышеупомянутая проблема решена следующим образом:

UPDATE response SET deleted = 1 WHERE itemresponseid =? и -1! =?

@Yohan Liyanage, Спасибо за подсказку.

0

Тип данных для deleted long. Поэтому удалите '' из SET deleted = '1'

  • 0
    Даже после удаления '' из SET deleted = '1' , я получаю ту же ошибку. Приведенная ниже ошибка является подозрительной: Caused by: org.postgresql.util.PSQLException: The column index is out of range: 2, number of columns: 1 . Хотя запрос на обновление корректно отображается в журнале ошибок, но не уверен, почему он отображает исключение вне диапазона. org.springframework.dao.DataIntegrityViolationException: could not delete: [com.ItemResponse#47379632]; SQL [UPDATE fs_item_response SET deleted = 1 WHERE itemresponseid = ?];

Ещё вопросы

Сообщество Overcoder
Наверх
Меню