08-07
12

Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1

今天在做自身关联的时候遇到的问题:
Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1解决方案

阻力前提 :当有张表同一个字段管理2张表是,今天用one-to-moeny试了一下,
开始配置one-to-many时,是不能同时写入数据;
后来《Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1》不能同时跟新;找了资料大概理解里面的原理,但不是完全明白哦!还需要继续look@@;
xml中set配置:
<set name="offerd" lazy="false" inverse="false" outer-join="false" cascade="all">             <key column="offerID" />             <one-to-many class="OfferDetail"/>  </set>

摘抄部分资料,加深理解:
inverse和cascade部分解释
在集合类Set的add(object)操作时, 不会改变object的值,不会检查参数object是否是一个pojo对象,设置mainPojo的一个“桥属性”的值,不会自动设置relationPojo的对应的“桥属性”的值。 执行session.delete(pojo)时,pojo本身没有变化,他的属性值也没有变化。执行session.save(pojo)时,如果pojo的id不是hibernate或数据库生成,则它的值没有变化。如果pojo的id是hibernate或数据库生成,则hibernate会把id给pojo设上去。 extend: 对lazy=true的set,hibernate在进行set的操作(调用java.util.Set中声明的方法)时 会先inialize这个set,仅此而已。而inialize仅仅是从数据库中捞出set的数据。如果一个set已经被inialize了,那么对它进行的操作就是java.util.Set接口中定义的语义。另外,如果id由hibernate来生成,那么在save(pojo)时,hibernate会改变该pojo,会设置它的id。

(1)对one-to-many而言,改变set,会让hibernate执行一系列的update语句, 不会delete/insert数据
(2)对many-to-many而言,改变set,只修改关系表的数据,不会影响many-to-many的另一方。
(3)虽然one-to-many和many-to-many的数据库操作不一样,但目的都是一个:维护数据的一致性。执行的sql都只涉及到“桥字段”,不会考虑或改变其他的字段,所以对set的操作是没有效果地。 extend:对list,可能还会维护index字段。
感谢文章作者....
引:http://ricardo-flu.spaces.live.com/blog/cns!448fcfe483ac8d88!174.entry


文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: Batch up&amp;#100;ate manay-to-one
相关日志:
评论: 0 | 引用: 0 | 查看次数: 1948
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭