08-07
12
Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1
作者:Java伴侣 日期:2008-07-12
今天在做自身关联的时候遇到的问题:
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
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
评论: 0 | 引用: 0 | 查看次数: 1949
发表评论