主键为guid,机制用guid.comb由 Hibernate 自动生成。
现在有个新需求,要将查询出来的数据上传到另一个服务器的数据库。问题就来了,如果用save方法到B数据库,主键就会重新生成,数据是成功插入到B数据库了,但是与A数据库中的主键不一致。不知道这该如何处理,有没有主键机制是无主键时由Hibernate生成,有主键时不改变呢?

解决方案 »

  1.   


    假定对象有A,对应的hbm文件为A.hbm.xml,主键为guid,机制用guid.comb由 Hibernate 自动生成
    你重新写一个类为Atemp内容与A相同,
    在Atemp中加入构造器
    public Atemp(A a){
      this.id = a.getId();
      this.attr1 = a.getAttr1();
      .........
    }
    对应的hbm文件为Atemp.hbm.xml,
    主键生策略为
    <generator class="assigned">,赋值生成.其他内容与A.hbm.xml相同。在查询出数据A的集合后,将A集合转换为Atemp集合 Atemp temp = new Atemp(a),
    然后保存Atemp集合即可.好久没用hibernate了,不知道API中是否有在程序中直接操作ID生成的策略的类,你可以查下API.
      

  2.   

    如果两数据库要同步,且担心主键不一致,就说明原来两数据库主键都是不会重复的插入数据时hibernate不可带主键插入?
      

  3.   


    因为指定的了主键机制为guid.comb,是在save的时候由hibernate生成的。
    这时如果我再save的B数据库,hibernate就又重新生产了一个新主键。
    我的问题就是这个,这样造成了2个数据库数据一样但主键不一致的情况
      

  4.   


    当然有了,只不过换成自带主键机制的话,我要修改很多以前save的代码了,而已以后用也不方便那