Hibernate执行查询后会引发update操作并报错的解决方法
来源:互联网 发布:孔莹网络春晚 编辑:程序博客网 时间:2024/05/16 08:06
刚刚发现一个bug,就是在执行了导出数据库中的数据到excel表格后再去执行查询操作会报错,通过将
由于查询出来的对象的属性被重新赋值了,和数据库的值不对应;导致hibernate判断查询出来的对象发生了变化,因此自动执行了更新操作,操作会更新到数据库,但由于新字段的值位数超过了数据库对应列的大小限制,因此报错了。
所以,我在查询出结果后再重新复制了一份查询结果对象然后对复制后的对象执行了set操作,这样就避免了直接对查询出的对象进行set操作而引起Hibernate会执行更新操作的问题。
<property name="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</property> <property name="hibernate.show_sql">false</property> <property name="javax.persistence.validation.mode">none</property>
hibernate.show_sql语句属性改为false查看打印的语句发现select语句后又执行了update语句,因此查了些资料并结合代码找到了原因,
因为在执行导出操作时,会对查询出来的持久化状态的对象进行set赋值操作,如下:
list = ps.queryProgram(condition, scrollPage);if(mediastatus !=null && "0".equals(mediastatus)){list.get(i).setMediastatus(config.getMediastatus0());}
由于查询出来的对象的属性被重新赋值了,和数据库的值不对应;导致hibernate判断查询出来的对象发生了变化,因此自动执行了更新操作,操作会更新到数据库,但由于新字段的值位数超过了数据库对应列的大小限制,因此报错了。
“ORA-12899: value too large for column "WACOS"."PROGRAM"."STATUS" (actual: 9, maximum: 1)”
所以,我在查询出结果后再重新复制了一份查询结果对象然后对复制后的对象执行了set操作,这样就避免了直接对查询出的对象进行set操作而引起Hibernate会执行更新操作的问题。
list = ps.queryProgram(condition, scrollPage);//为了避免查询出的program对象在set操作后会自动更新,所以重新复制了一份查询出的对象!List<Program> newlist = new ArrayList<Program>(list.size());for(Program program : list){Program program2 = new Program();BeanUtils.copyProperties(program2, program);newlist.add(program2);}list = newlist;if(mediastatus !=null && "0".equals(mediastatus)){list.get(i).setMediastatus(config.getMediastatus0());}
阅读全文
0 0
- Hibernate执行查询后会引发update操作并报错的解决方法
- 关于Hibernate执行查询后会引发update操作的解决方法
- Hibernate执行update操作之后查询跟新的语句出错
- Hibernate执行Update操作之后查询跟新的语句出错
- hibernate 查询执行了update
- 使用Hibernate操作对象的时候报错【update一个对象报的错】
- hibernate (多对多) 执行update更新操作时,关联表数据会被删除
- ADO执行update 报错“操作已被用户取消”
- yii 对于没设主键的表,执行update操作时会报错
- hibernate执行完查询操作后又执行许多更新操作
- hibernate执行完查询操作后又执行许多更新操作
- hibernate使用hql执行查询操作时,多出update语句
- Hibernate如果查询更改了值,没有save,如果提交了仍然会执行update语句(十一)
- SSH在service更新视图VO后,视图会随机自动update到数据库的解决方法
- Ubuntu中apt-get update报错的解决方法
- 刷新完固件后opkg update报错的解决方法
- hibernate查询报错
- hibernate 报错: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1 解决方法
- iOS8 Photos Framework
- yii框架 AR增删改查 分页
- Jmeter使用Groovy连接Mongodb
- Memcache
- 解决问题:在使用springmvc的web.xml配置乱码拦截器之后接收的get或者post请求中文还是乱码
- Hibernate执行查询后会引发update操作并报错的解决方法
- java 空指针异常解决办法
- 文章标题
- Linux下安装svn
- javaEE中的spring配置笔记
- The method xxx() of type xx must override or implement a supertype method
- Elasticsearch初体验
- 反转单链表
- 【真题 腾讯】满二叉搜索树求三个节点的最低公共祖先