- 浏览: 457204 次
- 来自: ...
-
文章分类
最新评论
-
edwardjuice:
淺顯易懂謝謝
context-param和init-param区别 -
ivan:
shihengli2010 写道我说下我的情况,客户给的数据是 ...
jxl读取excel文件异常:Unable to recognize OLE stream -
shihengli2010:
我说下我的情况,客户给的数据是xlsx类型的,打开报错,改下后 ...
jxl读取excel文件异常:Unable to recognize OLE stream -
brucechen:
刚刚解决这个问题了。我有一个表Picture保持路径字段设置不 ...
Hibernate 疑难异常及处理 -
yjb8119010:
context-param和init-param区别
从这个bug的字面上,应该是BBusinessman的某个属性是一个实体,在这个实体没有保存之前就保存Businessman对象,导致的错误。所以我就一直看Businessman的属性中到底哪个是实体,结果发现三个,分别City , Type, Status,而且这三个实体都是dao.load( Id , Session)从数据库中获得的,不是已经有Id的,或者是null,而不存在没有保存的实体。
于是我又怀疑,是否是同一个事务需要一个session,如果不使用此session,是不是这个原因,于是我把事务中方法里所有dao.getSession()这样不太明确的地方都是用方法传入的session,这样session都是同一个了,但是仍旧有此错误。
这样,BBusinessman的各个属性都是没有问题的。那么是否是没有保存BBusinessman之前,而且BBusinessman又被当作某个实体的属性,首先保存此实体,然后去保存BBusinessman,这样是否会导致这个错误。结果我发现,正是这个问题。
================错误的写法:===================
Session session = dao.getSession();
Transaction tx = session.beginTransaction();
Bo.setBman( form ,man,session);
Bo.saveChangeTable( man,session); // 把man当作属性赋给ChangeTable,并保存ChangeTable. 就是这出的错,
dao.save(man,session); // 保存man
tx.commit();
==================== 应该这样写:===============
Session session = dao.getSession();
Transaction tx = session.beginTransaction();
Bo.setBman( form ,man,session);
dao.save(man,session); // 保存man
Bo.saveChangeTable( man,session); // 把man当作属性赋给ChangeTable,并保存ChangeTable. 就是这出的错,
tx.commit();
这样,问题就解决了。
4、Write operations are not allowed in read-only mode (FlushMode.NEVER) - turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition 错误解决
错误代码:
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER) - turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition
错误原因:
OpenSessionInViewFilter在getSession的时候,会把获取回来的session的flush mode 设为FlushMode.NEVER。然后把该sessionFactory绑定到TransactionSynchronizationManager,使request的整个过程都使用同一个session,在请求过后再接除该sessionFactory的绑定,最后closeSessionIfNecessary根据该session是否已和transaction绑定来决定是否关闭session。在这个过程中,若HibernateTemplate 发现自当前session有不是readOnly的transaction,就会获取到FlushMode.AUTO Session,使方法拥有写权限。
也即是,如果有不是readOnly的transaction就可以由Flush.NEVER转为Flush.AUTO,拥有insert,update,delete操作权限,如果没有transaction,并且没有另外人为地设flush model的话,则doFilter的整个过程都是Flush.NEVER。所以受transaction保护的方法有写权限,没受保护的则没有。
参考文章:
http://calvin.blog.javascud.org/post/46.htm
解决办法:
采用spring的事务声明,使方法受transaction控制
<bean id="baseTransaction"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager" ref="transactionManager"/>
<property name="proxyTargetClass" value="true"/>
<property name="transactionAttributes">
<props>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean id="userService" parent="baseTransaction">
<property name="target">
<bean class="com.phopesoft.security.service.impl.UserServiceImpl"/>
</property>
</bean>
5、关于Hibernate的 Batch update returned unexpected row count from update异常
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,在这里设置一个空,这样就不会抛出错误了。
评论
1.建议在数据库手动添加一条合理的数据看看能否加进去!作为最基本的测试!
2.确保自己的id是自增长的时候,就可以考虑是不是其他非空字段的问题
3.希望我的错误能与你相同!
发表评论
-
MySQL本地可以连接,远程连接不上的解决
2014-05-20 13:40 1113解决方法有两个: 一: 在服务器上登陆进入MySql,更 ... -
ubuntu 12.04安装mysql5.6
2013-03-08 23:59 1512参照 http://www.4tm.biz/blog/201 ... -
db2-db2-0 服务不能启动解决
2011-10-05 22:20 2068今天在windows8上安装db2 折磨了半天,开始装8.1报 ... -
DB Name specified matches the SPM Name. Please use a different name SQLSTATE
2011-10-05 22:20 3294在创建数据库或者恢复的时候出现下面语句: SQL090 ... -
windows2003远程桌面退出后系统自动注销的解决方法
2011-07-08 10:09 3839转自:http://hangangsir.blog.163.c ... -
数据库delete数据慢的一种解决方法
2011-04-16 15:50 3484今天在做数据清理的时候发现一张表的数据删除非常的慢,平均要10 ... -
SQL0912N
2011-04-15 13:58 2092SQL0912N SQLSTATE: 57011 已 ... -
javascript回调参数传递
2010-01-20 15:09 1573div.onclick=new Function(" ... -
ajax提交乱码解决
2010-01-12 12:55 1155这两天在弄google maps的时候终于遇到ajax乱码了, ... -
google maps v3 getBounds()
2010-01-11 12:38 2804这两天被Google map的getBounds搞得郁闷,在初 ... -
DB2编译出现SQL7032N错误
2010-01-03 15:35 1640每次重装系统之后编译d ... -
deleted object would be re-saved by cascade
2009-12-04 11:09 3654deleted object would be re-save ... -
SQL0290N 不允许访问表空间。 SQLSTATE=55039
2009-10-13 11:07 7423db2一个临时表空间被删除,报“SQL0290N 不允许访问 ... -
分区表恢复
2009-05-26 17:20 2467是一款磁盘分区及数据 ... -
jxl读取excel文件异常:Unable to recognize OLE stream
2009-01-05 11:19 24127现象1: 用jxl读取某excel文件回报 ... -
NetBean在Ubuntu下界面乱码解决
2008-12-06 16:05 1372在ubuntu下装好Netbans发现,启动之后netbean ... -
sony vaio VGN-S4XP 驱动
2008-01-22 14:50 1270千辛万苦终于又找到爱机的驱动特记录一下: http://sup ... -
(DB2)SQL1585N 不存在具有足够页大小的系统临时表空间
2008-01-04 17:30 10167SQL1585N不存在具有足够页大小的系统临时表空间。 解释 ... -
(DB2)CLI0621E “JDBC 服务器”配置不受支持
2008-01-04 17:10 2599连接数据库用的那个db2java.zip包,一定要跟数据库服务 ... -
彻底杜绝双击盘符情况下的autorun.inf调用
2007-11-23 19:41 1377参考cnbeta上的cnlong朋友的意见,测试通过,通过注册 ...
相关推荐
本文将深入探讨SSH配置的详细步骤以及在配置过程中可能遇到的异常处理。 首先,我们从Struts开始。Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架。配置Struts通常包括以下步骤: 1. 添加...
3. **异常处理**:Java中的异常处理是一个重要的错误处理机制,它允许程序在遇到错误时能够优雅地恢复,而不是突然崩溃。你会学习如何使用try-catch-finally语句块来捕获和处理异常,以及自定义异常的创建和使用。 ...
第12章:讲解了如何在Spring中集成Hibernate、myBatis等数据访问框架,同时,读者还将学习到ORM框架的混用和DAO层设计的知识。 第13章:本章重点对在Spring中如何使用Quartz进行任务调度进行了讲解,同时还涉及...
源码中,可以看到 Spring 如何封装 SQL 执行和异常处理。 5. **Web 应用支持**:Spring MVC 是 Spring 为 Web 应用提供的模块,它负责处理 HTTP 请求,执行业务逻辑,并返回响应。`DispatcherServlet` 负责调度请求...
第12章:讲解了如何在Spring中集成Hibernate、myBatis等数据访问框架,同时,读者还将学习到ORM框架的混用和DAO层设计的知识。 第13章:本章重点对在Spring中如何使用Quartz进行任务调度进行了讲解,同时还涉及...
**8.7 疑难问题应对** - 讨论了在调试过程中遇到的复杂问题。 - 提出了系统化解决问题的思路。 通过以上内容的详细介绍,我们可以看到,在CTPM的开发和调试过程中,从硬件接口到软件实现,再到系统集成,每一个环节...
- **核心类库**:包括`java.lang`、`java.io`、`java.util`等,它们提供了基本数据类型、异常处理、输入/输出、集合框架等功能。 - **字符串处理**:`String`类是不可变的,而`StringBuilder`和`StringBuffer`则...