mysql数据库,在数据库中把主键设置成自动增长后在SSH中调用getHibernateTemplate().update(user);更新user时会报错。数据库主键自增取消则不报错。请问为什么呢?
user.hbm.xml:
<hibernate-mapping>
<class name="pack_bean.User" table="users">
<id name="id" type="java.lang.Integer" column="id">
<generator class="native"></generator>
</id>

<property name="firstname" type="string" column="firstname" length="255"></property>
<property name="lastname" type="string" column="lastname" length="255"></property>
<property name="age" type="int" column="age"></property>

</class>
</hibernate-mapping>
class=“increament、identity、uuid。。等”试了好多都不行。
报错:
org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; nested exception is org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:654)
org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:377)
org.springframework.orm.hibernate3.HibernateTemplate.update(HibernateTemplate.java:654)
org.springframework.orm.hibernate3.HibernateTemplate.update(HibernateTemplate.java:650)
pack_daoImpl.UserDAOImpl.updateUser(UserDAOImpl.java:37)
pack_serviceImpl.UserServiceImpl.update(UserServiceImpl.java:41)
pack_action_user.UpdateUserAction.execute(UpdateUserAction.java:26)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
     .
     .
     .
     .
     .

解决方案 »

  1.   

    你确认你要更新的user对象的id有值?
      

  2.   

    你的代码这样写肯定报错, 你更新的时候,先把user查询出来,把要更新的值set到user ,然后再update   这样就不报错了。 操作hibernate的时候要涉及对象的持久态和游离态,你去找些资料看看吧。
      

  3.   

    actual row count: 0; expected: 1 
    没有要更新的对象~
    若果如你所说 。数据库主键自增取消则不报错 
    这样的话 我怀疑跟你是否更新了 ID 的值有关