2005-9-5 9:51:49 net.sf.hibernate.impl.SessionImpl execute
严重: Could not synchronize database state with session
net.sf.hibernate.HibernateException: SQL insert, update or delete failed (row not found)
at net.sf.hibernate.impl.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:25)
at net.sf.hibernate.persister.EntityPersister.update(EntityPersister.java:688)
at net.sf.hibernate.persister.EntityPersister.update(EntityPersister.java:641)
at net.sf.hibernate.impl.ScheduledUpdate.execute(ScheduledUpdate.java:52)
at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2382)
at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2336)
at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2204)
at net.sf.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:61)
at com.km.service.impl.UserImpl.updateOrSaveUser(UserImpl.java:92)
at com.km.service.run.Test.insert(Test.java:41)
at com.km.service.run.Test.main(Test.java:111)

解决方案 »

  1.   

    严重: Could not synchronize database state with session
    net.sf.hibernate.HibernateException: SQL insert, update or delete failed (row not found)你在配置文件中,加了关联关系,那么你有没有把对应的属性加到pojo里边呢!Public class User{
    .......
    Private Grade grade;    //既然关联关系中,有这个属性,那么pojo中,也应该有这个属性。
    ........                    //还必须有这个属性对应的get和set方法。}-------------------------------
    你这个是一个双向的   1:n    关系,在grade的pojo里也得加上User属性。
      

  2.   

    有啊,只是在关联级联时产生错误,保存单个对象没有什么问题。
    其中Grade是用了个复合主键。
    User.javapublic class User implements Serializable{ private String     userID;
    private String     userName;
    private int        age;
    private boolean    sex;
    private String     address;
    private String     memo;
        private Set       gradeList = new HashSet();
    Grade.java
    public class Grade implements Serializable { private String userID;
    private String courseID; private int source;
        
        private User user;
      

  3.   

    User和Grade中所有属性的set和get方法都有,,并且Grade中重写了equals和hashcode了
      

  4.   

    请问一下,如何改变hibernate的sql语句啊。。
    我修改保存现有的user对象,并为user新加几个grade关联对象。生成的sql总是 Hibernate: update _grade_ set grade_courseID=?, grade_source=? where id=?
    数据库中没有与之对应的数据应该是insert啊。。为什么老是update呢???
    如何解决这个问题啊
      

  5.   

    主要要看你传入的grade对象的courseID是否为空了,
    不为空用session.update(grade); //UPDATE
    为空用session.save(grade); //insert
      

  6.   

    id那里需要加unsaved-value=0,就搞定了。
    而且,既然你用了inverse="true",你就应该只针对Grade操作,user.add(grade);grade.setUser(user);然后session.save(grade)就可以了。
    不要去session.save(user)。
      

  7.   

    非常感谢上面这么多朋友的回复
    我现在已经改成了单一主键,对于复合主键还是不是很清楚,如果有哪位朋友知道的话,请发表一下自己的看法
    现在又出了个问题,级联插入的时候插入一条数据时没有问题,但插入多条的时候报了个异常:
    java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Can't start a cloned connection while in manual transaction mode.
    at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
    at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
    还请各位赐教!在此谢过!!
      

  8.   

    有可能是microsoft的Java SQL Server驱动程序不支持二次查询导致的吧?事先声明这是猜测啊,你换成jtds试试