首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate软删除-列索引超出范围异常而软删除

Hibernate软删除-列索引超出范围异常而软删除
EN

Stack Overflow用户
提问于 2014-03-18 10:52:41
回答 3查看 1.5K关注 0票数 2

我得到了下面的例外,而软删除。我不知道哪里出了错?有人能帮我吗。提前感谢

代码语言:javascript
复制
    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>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-13 17:35:10

在内部,当对版本实体发出删除请求时,Hibernate似乎也将版本号作为第二个参数传递。因此,您需要修改SQLDelete语句以接受version参数。

例如。

代码语言:javascript
复制
UPDATE response SET deleted = '1' WHERE itemresponseid = ? AND version = ?
票数 7
EN

Stack Overflow用户

发布于 2014-03-18 11:02:12

deleted的数据类型是long。因此,从''中删除SET deleted = '1'

票数 0
EN

Stack Overflow用户

发布于 2014-09-03 17:14:13

解决上述问题的办法如下:

更新响应集删除=1,其中itemresponseid =?还有-1 !=?

@Yohan Liyanage,谢谢你的提示。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22477167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档