日期:2014-05-20  浏览次数:20778 次

deleteAll()方法出现异常,Batch update returned unexpected row ……,并发的问题?
sql server数据库,主键是自增int,spring管理hibernate
spring配置文件
XML code

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.microsoft.jdbc.sqlserver.SQLServerDriver">
        </property>
        <property name="url" value="jdbc:microsoft:sqlserver://localhost:1433">
        </property>
        <property name="username" value="sa"></property>
        <property name="password" value="sa"></property>
    </bean>
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource">
            <ref bean="dataSource" />
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">
                    org.hibernate.dialect.SQLServerDialect
                </prop>
            </props>
        </property>
        <property name="mappingResources">
            <list>
            <value>cn/tpexam/model/Tpexamtmp.hbm.xml</value>
        </property>
    </bean>

id主键生成器是native

代码继承了HibernateDaoSupport
出错的地方这样写的:
Java code

try {
            this.getHibernateTemplate().deleteAll(list);
            return true;
        } catch (RuntimeException e) {
            logger.error("deleteAll entity err:" , e);
            throw e;
        }


就在deleteAll处出的异常,list是通过getHibernateTemplate().find(hql);方法查到的List,在删除之前对这个表只有查询,没有保存更新插入等操作

而且这个异常似乎只有在多个页面同时访问时容易出现,跟并发有关系?

在网上找的都是update或者出现一对多的情况,删除时异常到底的什么原因呢?


------解决方案--------------------
1,检查数据库中的数据,看是否存在原来就不符合主外键关系的数据。
2,确保list集合中的数据均为持久状态。
------解决方案--------------------
报什么错误啊,你注意一下session别手动关闭了
------解决方案--------------------
仔细检查一下你的配置吧,以前我也经常出这样的问题