- 浏览: 376050 次
- 来自: 北京
文章分类
- 全部博客 (237)
- XML (6)
- JavaSE (39)
- Junit (1)
- Maven (10)
- JavaScript (12)
- JavaEE (16)
- HTML5 (10)
- java多线程 (8)
- Hibernate (30)
- Java反射 (3)
- Spring (11)
- Struts (1)
- svn (2)
- linux (12)
- 代码实例 (1)
- 设计模式 (1)
- UML (1)
- javassist (1)
- Oracle (3)
- Hibernate异常 (9)
- DWR (6)
- Java泛型 (2)
- SpringMVC (11)
- Dbunit (3)
- github (2)
- Algorithm (1)
- zTree (1)
- jquery (7)
- freemarker (4)
- mysql (5)
- ffmpeg (1)
- 编码 (1)
- lucene (15)
- hadoop (1)
- JVM (1)
- Regular Expressions (5)
- myeclipse (1)
- 爬虫 (7)
- 加密 (3)
- WebService (2)
- Socket (2)
- Windows (1)
最新评论
-
wxpsjm:
好直接
HV000030: No validator could be found for type: java.lang.Integer. -
wxhhbdx:
学习了,对新手来说很不错的教程。
SpringMVC入门 (二) 数值传递 -
xgcai:
正好在学dwr
DWR入门 (二)用户实例
Batch update returned unexpected row count from update [0]; actual row count: 0;
- 博客分类:
- Hibernate
先把配置文件放上来:
在运行之前, 数据库里面是没有任何相关的数据的。 当transaction.commit()的时候, hibernate会执行
Hibernate: select hibernate_sequence.nextval from dual
Hibernate: insert into test_user (test_name, id) values (?, ?)
Hibernate: update test_order set test_name=?, customer_id=? where id=?
这里很意外的执行了一条update语句, 然后报错。
在网上找到了解决方案, 不过还是看了一下源码,想看看问题究竟出在哪里。可惜
没找到,但是学习到了一点点源码。。
解决方案 :http://hi.baidu.com/shirdrn/item/2fd8bc0abc8bc56ed45a11af
---------------------------------------
在ActionQueue里面有这个executeActions()方法,
它对所有的dml相关的内容进行执行操作。
下个图是关于这些list参数的, 可以看到, 我们的Order对象, 原本是应该被插入到数据库里并和User实现级联的,可是这里却被直接放入了updates的集合中。
结果就出发了update的sql语句。
==========================================
当把Order的id生成方式改成
<generator class="assigned"/>
Order对象便被放入了inserts集合对象中, 最终也就触发了insert语句的执行。
仅仅改变了一个identifier的生成方式就导致这样, 到底是为什么?
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.lj.zhang"> <class name="Order" table="test_order"> <id name="id"> <generator class="native"/> </id> <property name="name" column="test_name"/> <many-to-one name="user" class="com.lj.zhang.User" column="customer_id"></many-to-one> </class> </hibernate-mapping> <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.lj.zhang"> <class name="User" table="test_user"> <id name="id"> <generator class="native"/> </id> <property name="name" type="string" length="40" column="test_name"/> <set name="orders" cascade="save-update" inverse="true"> <key column="customer_id"></key> <one-to-many class="com.lj.zhang.Order"/> </set> </class> </hibernate-mapping>
Main代码: package com.lj.zhang; import java.util.HashSet; import java.util.Set; import org.hibernate.Session; import org.hibernate.Transaction; import util.HibernateUtil; public class HibernateTest4 { @SuppressWarnings({ "unused", "unchecked" }) public static void main(String[] args) { Session session = HibernateUtil.openSession(); Transaction tx = null; tx = session.beginTransaction(); // Query query = session.createQuery("from User"); // List<User> list=query.list(); User u=new User(1,"alleni"); Order o1=new Order(1,"o1",u); Order o2=new Order(2,"o2",u); Set<Order>orders=new HashSet<Order>(); orders.add(o1); orders.add(o2); // session.save(o); u.setOrders(new HashSet<Order>()); u.getOrders().add(o1); u.getOrders().add(o2); session.save(u); tx.commit(); session.close(); } }
在运行之前, 数据库里面是没有任何相关的数据的。 当transaction.commit()的时候, hibernate会执行
Hibernate: select hibernate_sequence.nextval from dual
Hibernate: insert into test_user (test_name, id) values (?, ?)
Hibernate: update test_order set test_name=?, customer_id=? where id=?
这里很意外的执行了一条update语句, 然后报错。
在网上找到了解决方案, 不过还是看了一下源码,想看看问题究竟出在哪里。可惜
没找到,但是学习到了一点点源码。。
解决方案 :http://hi.baidu.com/shirdrn/item/2fd8bc0abc8bc56ed45a11af
---------------------------------------
在ActionQueue里面有这个executeActions()方法,
它对所有的dml相关的内容进行执行操作。
private void executeActions(List list) throws HibernateException { for ( Object aList : list ) { execute( (Executable) aList ); } list.clear(); session.getTransactionCoordinator().getJdbcCoordinator().executeBatch(); }
下个图是关于这些list参数的, 可以看到, 我们的Order对象, 原本是应该被插入到数据库里并和User实现级联的,可是这里却被直接放入了updates的集合中。
结果就出发了update的sql语句。
==========================================
当把Order的id生成方式改成
<generator class="assigned"/>
Order对象便被放入了inserts集合对象中, 最终也就触发了insert语句的执行。
仅仅改变了一个identifier的生成方式就导致这样, 到底是为什么?
发表评论
-
Connection is read-only. Queries leading to data modification are not allowed。
2014-04-06 21:52 3724<tx:advice id="txAdvic ... -
org.hibernate.HibernateException: No Session found for current thread
2014-04-06 12:37 0今天在maven中整合spring和hibernate,并使用 ... -
select new Topic from ' Mysql 生成SQL语句错误
2014-03-30 22:51 1655Caused by: com.mysql.jdbc.exce ... -
Unable to locate appropriate constructor on class
2014-02-20 00:11 1461org.hibernate.hql.internal.ast. ... -
Hibernate的load和get实际应用区分简单实例
2013-12-18 11:58 872今天在看孔浩的CMS视频时候看到的。 在57 -文章管理06 ... -
自定义OpenSessionInViewer过滤器
2013-12-11 12:12 1056摘自孔浩视频 spring部分-17_spring_SSH整合 ... -
数据库事务 (三)虚读(Phantom Read)
2013-12-01 13:21 0关于各种读 虚读 phantom read: 转自维基 ... -
Hibernate悲观锁
2013-11-30 17:30 0为了防止两个线程同时修改一个数据,造成更新数据丢失,我们可以使 ... -
Hibernate查询HQL实例
2013-11-29 15:56 1293三个实体类对象: public class Team { ... -
QBC与HQL检索
2013-11-28 17:39 0QBC(Query By Criteria) API提供了检索 ... -
Hibernate继承映射
2013-11-28 12:36 648继承映射分为三种情况 1.每个子类一张表 比如说有一个Pers ... -
Hibernate通过Composite-element配置外联表实例 (码)
2013-11-28 11:07 1016摘自圣思园Hibenrate 26. 组件映射深度解析 -37 ... -
Hibernate配置复合主键 composite primary key (二)
2013-11-27 16:41 1446摘自圣思园Hibernate 26.组件映射深度解析 上一篇 ... -
Hibernate配置复合主键 composite primary key (一)
2013-11-27 14:15 2455这篇是关于如何配置Hibernate实现复合主键的映射功能。 ... -
Hibernate通过Comparator接口自定义排序规则
2013-11-25 20:42 2516摘自圣思园 Hibernate25.自定义内存排序器详解及符合 ... -
Hibernate配置Set和List
2013-11-25 10:44 1878========================Set==== ... -
Hibernate的Map配置
2013-11-23 16:21 1296摘自圣思园022.Hibernate映 ... -
Hibernate多对多配置
2013-11-21 22:39 876场景: Student和Course,每一个Student有多 ... -
Hibernate延迟加载案例 (多: 一: 一,附代码)
2013-11-21 17:41 591摘自圣思园Hibernate20.一 ... -
Hibernate一对一配置
2013-11-20 21:49 1040摘自圣思园 19.Hibernate的对象检索策略深度解析.a ...
相关推荐
`JdbcTemplate`的`batchUpdate`方法就是用来实现这样的功能,它可以批量执行更新语句,如INSERT、UPDATE或DELETE。 `batchUpdate`方法的基本使用如下: ```java int[] result = jdbcTemplate.batchUpdate( ...
sqlhelper工具,batchupdate方法
安装 pip3 install mysql_batchUPDATE示例您可以使用可用的模式运行此示例以下示例与以下更新相同: UPDATE batch_test SET date = NOW() WHERE number > 0 . 2 AND date is NULL ; 这等效于以20行为批处理此更新: ...
在MyBatis中,批量更新(batch update)是一种提高数据库操作效率的重要手段,尤其是在处理大量数据更新时。这里我们将详细探讨如何在Oracle和MySQL数据库中使用MyBatis进行批量更新。 1. **Oracle数据库的批量更新...
**问题描述**:执行Hibernate查询语句时,系统提示`Unknown column 'notice0_.myPublishDate' in 'field list'`错误。 **可能原因**:该错误表示Hibernate尝试从数据库中查询一个不存在的字段,通常是由于实体类...
标题"Acount_batch.rar_acout_batch"暗示我们正在处理一个与账户管理和批量处理相关的软件工具,其核心是一个批处理脚本(Acount_batch.bat)。批处理是Microsoft Windows操作系统中的一种脚本编写方式,允许用户...
"Batch CIA 3DS Decryptor.zip" 是一个专门用于批量处理CIA转CCI的工具包,它包含了所需的所有组件。 首先,我们来看一下这个压缩包内的文件: 1. **Batch CIA 3DS Decryptor.bat**:这是一个批处理脚本,用户可以...
executor.update("test.batchUpdate", item); } executor.executeBatch(); return null; } } ); } } catch (Exception e) { // 处理异常 } ``` 5. **注意事项**: - 确保数据库驱动支持批量更新功能。 -...
The Definitive Guide to Spring Batch takes you from the “Hello, World!” of batch processing to complex scenarios demonstrating cloud native techniques for developing batch applications to be run on...
word-count-spring-batch-partitioning 使用 Spring Batch 在 PDF 文件中实现计数词遵循 Master/Slave 模型主/从模型字数统计算法设置、构建和运行初始化数据库创建用于存储 word-count 和 word-count-repository 的...
**批量归一化(Batch Normalization):加速深度网络训练** 在深度学习领域,Batch Normalization是一种被广泛采用的技术,其主要目标是通过减少内部协变量漂移(Internal Covariate Shift),来加速神经网络的训练...
【Spring Batch简介】 Spring Batch是Spring框架的一个模块,专门用于处理批量处理任务。它提供了一套强大、可扩展且易用的工具,用于处理大量数据的读取、处理和写入操作。Spring Batch的设计目标是解决企业级批量...
function SendSimpleSMS(const usernamepassword:string;to_: ArrayOfString;fromtext: string; const isflash: Boolean): ArrayOfString;function SendSimpleSMS2(const... const count: Integer): ArrayOfMessagesBL;
本主题主要关注批量决策树(Batch Decision Tree)的计算及其在影像数据中的应用。 决策树算法基于一系列规则对数据进行分割,通过构建树状结构来做出预测或决策。在遥感领域,决策树可以用来解析影像数据,如识别...
《批量DOC转CHM生成器:Batch DOC TO CHM Generator v2009.1.106.1341》 在信息技术领域,文档的格式多种多样,每种格式都有其特定的用途和优势。例如,DOC是Microsoft Word的默认文档格式,广泛用于文本编辑和排版...
print("Error during batch update: \(error)") } } ``` 四、与常规更新比较 常规更新通常涉及加载对象到内存,修改属性,然后保存回磁盘。这种方法在处理少量数据时是可行的,但当数据量大时,内存消耗和效率...
Byte 0: Flag – 0x00 Byte 1: Resource Type – 0x07 (Key) Byte 2-3: DBID – 0x0005 Byte 4-7: ObjectID – 0x 75D7831F (1977058079) Byte 8-9: IndexID – 0x0001 Byte 10-16: Hash Key value – 0x 02014F0...
Batch,Batch,Batch":What does it really mean? 对渲染中dc的消耗的讲解
从给定的文件信息来看,本文主要涉及S88批处理控制的知识,并且是从使用者的视角来探讨。S88批处理控制标准由国际测量和控制学会(ISA)提出,旨在提供一个通用的批处理控制系统设计、实施和操作的框架,主要被应用...
一个把指定目录下所有windows更新文件自动安装的小工具,省着自己一个个去点更新文件了,这个软件比批处理文件好的一点就是批处理文件还要手动去添加路径和文件,这个不用制定一个目录后自动查找系统还没有安装过的...