表的同步、hibernate随想

两个相同表(A-》B)之间数据同步方案--
1.直接删除B表数据,整个插入
2.建临时表,记录A表的操作,用字段表示 新增、删除、修改,然后查询临时表,把那些相关操作的 反应到B表
3.使用SQL比较两边数据的差异。A表新增的话,如select * from A where not exists (select 1 from B where A.pk=B.pk) ,把这个数据新增到B表。删除的话,两个表反过来即可。修改的话,select A.* from A ,B where A.filed1 <>B.field1 and A.field2<>B.field2 ... and  A .pk =B.pk 查询出A修改的记录,再更新到B表里面


延伸: hibernate 对记录的修改持久化,一般作修改操作时候,因为页面上有些字段没改,会有Null值,这时一般会先从数据库里查询一下,然后copyNotNull (source、target无所谓,但是为了性能会把查出来的作为target,下面讲为什么),--此时如果hibernate能像ibatis那样有个对字段空值的判断就好了、就不需要查询再copy了。再持久化。 如果,持久化的记录是persistent状态,hibernate会比较缓存里的和新的,只对修改过的进行更新,不会所有字段都更新(应该是这么处理的,挨个比较字段值,不等的,放入Map里,做update时候,再拼接这个Map 里的字段和值)

猜你喜欢

转载自cainiao1923.iteye.com/blog/2330112