hibernate 是用spring 管理的
hbm.xml 配置文件类
<hibernate-mapping>
<class name="com.adito.bean.ExplorerProperties"
table="explorer_properties" catalog="explorer_configuration">
<composite-id name="id" class="com.adito.bean.ExplorerPropertiesId">
<key-property name="key1" type="java.lang.String">
<column name="KEY_1" not-null="true" />
</key-property>
<key-property name="key2" type="java.lang.String">
<column name="KEY_2" not-null="true" />
</key-property>
</composite-id>
<property name="key3" type="java.lang.String">
<column name="KEY_3" not-null="true"/>
</property>
<property name="key4" type="java.lang.String">
<column name="KEY_4" not-null="true"/>
</property>
<property name="key5" type="java.lang.String">
<column name="KEY_5" not-null="true"/>
</property>
<property name="value" type="java.lang.String">
<column name="value" not-null="true"/>
</property>
</class>
</hibernate-mapping>
由于数据库表 没有主键 所有hibernate自动将所有字段都设为复合主键 我把它修改为 将key1 和key2作为复合主键
getHibernateTemplate().save(entity); 是可以的
getHibernateTemplate().update(entity); 就不行了 总是报
Exception in thread "main" 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
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:657)
at org.springframework.orm.hibernate3.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:738)
at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:614)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:709)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:678)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:321)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:116)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:635)
at com.adito.service.JDBCActiveDirectoryService$$EnhancerByCGLIB$$9e0afad4.toPropertyProfilesDaoUpdate(<generated>)
at com.adito.service.JDBCActiveDirectoryService.main(JDBCActiveDirectoryService.java:156)
Caused by: org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
at org.hibernate.jdbc.Expectations$BasicExpectation.checkBatched(Expectations.java:61)
at org.hibernate.jdbc.Expectations$BasicExpectation.verifyOutcome(Expectations.java:46)
at org.hibernate.jdbc.BatchingBatcher.checkRowCounts(BatchingBatcher.java:68)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:237)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:142)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:606)
... 8 more
异常 各位帮我看看 急求帮助!!
hbm.xml 配置文件类
<hibernate-mapping>
<class name="com.adito.bean.ExplorerProperties"
table="explorer_properties" catalog="explorer_configuration">
<composite-id name="id" class="com.adito.bean.ExplorerPropertiesId">
<key-property name="key1" type="java.lang.String">
<column name="KEY_1" not-null="true" />
</key-property>
<key-property name="key2" type="java.lang.String">
<column name="KEY_2" not-null="true" />
</key-property>
</composite-id>
<property name="key3" type="java.lang.String">
<column name="KEY_3" not-null="true"/>
</property>
<property name="key4" type="java.lang.String">
<column name="KEY_4" not-null="true"/>
</property>
<property name="key5" type="java.lang.String">
<column name="KEY_5" not-null="true"/>
</property>
<property name="value" type="java.lang.String">
<column name="value" not-null="true"/>
</property>
</class>
</hibernate-mapping>
由于数据库表 没有主键 所有hibernate自动将所有字段都设为复合主键 我把它修改为 将key1 和key2作为复合主键
getHibernateTemplate().save(entity); 是可以的
getHibernateTemplate().update(entity); 就不行了 总是报
Exception in thread "main" 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
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:657)
at org.springframework.orm.hibernate3.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:738)
at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:614)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:709)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:678)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:321)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:116)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:635)
at com.adito.service.JDBCActiveDirectoryService$$EnhancerByCGLIB$$9e0afad4.toPropertyProfilesDaoUpdate(<generated>)
at com.adito.service.JDBCActiveDirectoryService.main(JDBCActiveDirectoryService.java:156)
Caused by: org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
at org.hibernate.jdbc.Expectations$BasicExpectation.checkBatched(Expectations.java:61)
at org.hibernate.jdbc.Expectations$BasicExpectation.verifyOutcome(Expectations.java:46)
at org.hibernate.jdbc.BatchingBatcher.checkRowCounts(BatchingBatcher.java:68)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:237)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:142)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:606)
... 8 more
异常 各位帮我看看 急求帮助!!
解决方案 »
- 同样的host and port,"bc = pool.getBlockingConnection(host, port);"为什么建立新连接?
- 一个线程绑定多个套接字的程序怎么做啊
- java 网络编程 问题
- BeanUtils的克隆或拷贝
- 过来接分呀!
- wabacus轻量级框架的数据使用问题
- 那里可以找到struts-legacy.jar这个包?????
- 那里有Junit的中文电子文档书
- linux下安装jdk的问题!
- mybatis的mapper.xml中的mapper标签错误
- 请教一个jbpm3.2加载流程定义文件的路径问题
- 求hibernate 在spring托管 下对于复合主键的 增 删 改 资料。。
ERROR [http-8080-Processor22] (BatchingBatcher.java:60) - Exception executing batch:
org.hibernate.StaleStateException: Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1
1).使用的是hibernate的saveOrUpdate方法保存实例。saveOrUpdate方法要求ID为null时才执行SAVE,在其它情况下执行UPDATE。在保存实例的时候是新增,但你的ID不为null,所以使用的是UPDATE,但是数据库里没有主键相关的值,所以出现异常。=================================================================
异常:
在插入时:
org.hibernate.StaleStateException: Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1
解决方法:
如果是自增主键?
有的数据库是可以修改自增主键例如:mysql,有的数据库是不允许修改自增主键的例如postgresql
不要设置自增主键的值2)
在Hibernate映射一对多,多对一,多对多的时候新增常常会出现这个异常,代码如下:public void saveFunctionCell(FunctionCell functionCell, Integer pid) {
System.out.println("现在进行新增操作");
FunctionCell fc = new FunctionCell();
try {
BeanUtils.copyProperties(fc, functionCell);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
fc.setFuncCellID(null);
// 获得父权限
FunctionCell pfc = functionCellDao.findFunctionCellByID(pid);
fc.setParentFunctionCell(pfc);
functionCellDao.saveFunctionCell(fc);
}
注意特别标识出来的这个地方,BeanUtils拷贝Bean属性的时候,它会将你的Integer类型全部设置成0,在这里设置一个空,这样就不会抛出错误了。
getHibernateTemplate().save(entity); 是可以的
getHibernateTemplate().update(entity); 就不行了 总是报错添加是可以的 只是修改报错