type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception javax.servlet.ServletException: Could not execute JDBC batch update
cn.hxex.vote.filter.HibernateFilter.doFilter(HibernateFilter.java:75)
root cause org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:69)
org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:202)
org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:230)
org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:143)
org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:296)
org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1009)
org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:356)
org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
cn.hxex.vote.filter.HibernateFilter.doFilter(HibernateFilter.java:57)请问这是哪里出的错啊 是不是数据设置有问题 只有删除操作会出此错 对查询 修改 添加都没有问题 求各位大侠帮忙啊...在线等

解决方案 »

  1.   

    Could   not   execute   JDBC   batch   update 
    不能执行jdbc的级联更新
    是不是你删除的这张表和别的表有级联关系,结果你删除这张表时会级联删除另外表的记录
    可能时另外的记录正在使用
    如果没有的话就检查一下你的.hbm.xml中关于级联那部分代码
      

  2.   

    要删除数据的表只是有一个外键参照 删除其中的数据不应该受到级联关系的影响啊 
    下面是两个表的级联 请帮看一下吧
    Vote.hbm.xml
    ------------
    <class name="Vote" table="VOTE">

    <id name="id" column="ID" type="string">
               <generator class="uuid.hex"/>
    </id>

    <property name="name" column="NAME"/>

    <property name="title" column="TITLE" />

    <property name="votetype" column="VOTETYPE" /> <property name="pictype" column="PICTYPE" /> <set name="voteitems" cascade="all" order-by="title asc">
    <key column="VOTE_ID"/>
    <one-to-many class="VoteItem"/>
    </set>

    </class>
    ==================================================
    VoteItem.hbm.xml
    ----------------
            <class name="VoteItem" table="VOTEITEM">

    <id name="id" column="ID" type="string">
               <generator class="uuid.hex"/>
    </id>

    <property name="title" column="TITLE"/>

    <property name="votenum" column="VOTENUM" />

    <many-to-one name="vote"   column="VOTE_ID"/>

    </class>
      

  3.   

    create table vote(
    id varchar(32) not null,
    name varchar(40) not null,
    title varchar(120) not null,
    votetype varchar(24),
    pictype varchar(24),
    constraint vote_pk primary key (id),
    constraint vote_unique_name unique (name));create table voteitem(
    id varchar(32) not null,
    title varchar(64) not null,
    votenum varchar(32),
    vote_id varchar(32) not null,
    constraint voteitem_pk primary key (id),
    constraint voteitem_vote foreign key (vote_id) references vote (id));上面上两个表的sql脚本 看看是不是这里有错啊
      

  4.   

    sql是没有问题的
    配置我大致看了一下,也没有什么问题
    对了
    在各自的类文件中设置set和Vote没有
    还有,最好把删除是生成的sql也发一下
      

  5.   

    对不起各位现在才回复
    类中对每个属性都设置了setXXX和getXXX方法 我用的是hibernate来存储数据的 数据是以对象的形式传给hibernate由hibernate跟根映射文件自动在数据对象和表中数据之间的转换地.子类:public void deleteVote(Vote vote)       子类:public void deleteVoteItem(VoteItem voteitem)
        {                                            {
              super.deleteObject( vote );                  super.deleteObject( voteitem );
        }                                      }
                             ↓调用                                      ↓调用 
    父类:public void deleteObject( Object obj ) ←———————————
        {
              getSession().delete( obj );
        }
    上面是一个子类的两个删除不同数据对象的方法 这两个方法都调用父类的deleteObject( Object obj )方法来执行删除操作 getSession().delete( obj );这个是就hibernate提供的持久化方法了 这里不会有什么问题吧hornbilltofy
    你说"设计时使用外键会给你后带来很多麻烦."如果不使用外键的话那么删除被参照表里的数据时参照此数据的别一个表里的数据就会成为没有用的数据而长期存在数据库中了 这样怎么办啊 
      

  6.   

    many-to-one   name="vote"       column="VOTE_ID"/> 这一句少了一个inverse="true"吧,应该由另一端来管理这个关系.
      

  7.   

    many-to-one       name="vote"               column="VOTE_ID"/>   这一句少了一个inverse="true"吧,应该由另一端来管理这个关系.如果不由另一端来管理这个关系 是不是要把数据库中的外键参照去掉啊
      

  8.   

    如果把外键参照去了就在数据库设计这一步做得不好了吧.一般这种关系都是有外键关联的.我好像说反了哦.呵呵,没用熟练,应该总是由多端来管理的.<set   name="voteitems"   cascade="all"   order-by="title   asc"> 
    <key   column="VOTE_ID"/> 
    <one-to-many   class="VoteItem"/> 
    </set> 这个Set应该是inverse="true".
    你两个试试吧.只能由一端来管理.
      

  9.   

    晕了,应该VoteItem是"多"的一端,所以还是<many-to-one name="vote"  column="VOTE_ID"/>   inverse="true". 
      

  10.   

    AWUSOFT 谢谢了 可以了 是我弄错了在两端都进行了管理我把数据库中的外键约束去掉后就可以了多谢各位了...