日期:2014-05-18  浏览次数:20745 次

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

不知道这该如何处理,有没有主键机制是无主键时由Hibernate生成,有主键时不改变呢?

------解决方案--------------------

假定对象有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.