表的同步、hibernate随想

两个相同表(A-》B)之间数据同步方案--

1.直接删除B表数据,整个插入

2.建临时表,记录A表的操作,用字段表示新增、删除、修改,然后查询临时表,把那些相关操作的反应到B表

3.使用SQL比较两边数据的差异。A表新增的话,如select*fromAwherenotexists(select1fromBwhereA.pk=B.pk),把这个数据新增到B表。删除的话,两个表反过来即可。修改的话,selectA.*fromA,BwhereA.filed1<>B.field1andA.field2<>B.field2...andA.pk=B.pk查询出A修改的记录,再更新到B表里面

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

相关推荐