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)
.
.
.
.
.
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)
.
.
.
.
.
没有要更新的对象~
若果如你所说 。数据库主键自增取消则不报错
这样的话 我怀疑跟你是否更新了 ID 的值有关