id字段是主键,hibernate插入时报主键冲突了。

解决方案 »

  1.   

    Hibernate 可以用UUID.hex 自动生成主键,生成不会重复的32位
    字符串
      

  2.   

    oracle数据库里的主健能自动增长吗?在我的记忆里是不能的,你要使oracle里主健能自动增长,必须在搞个序列.在序列自动增长.每插入一条数据时,再到序列里去取ID 这样才能使用<generator class="increment" /> 要不就不可能插得进....
       如果你换个数据库,就没这个问题了,可在oracle中不能用。......
      

  3.   

    还有就是,这不是hibernate的问题,问题出在你使用的数据库..
      

  4.   

    increment
    用于为long, short或者int类型生成 唯一标识。只有在没有其他进程往同一张表中插入数据时才能使用。最好换一个生成的方式吧
      

  5.   

    SQL Server2000里也不能设置主键自动增长吧
      

  6.   

    用oracle的sequence机制就没用题了吧
      

  7.   

    to badiwd1216()
    SQL Server2000 是可以设置主键自动增长的!
    使用 identity
      

  8.   

    各位,可能我说得不够清晰,本来所有的表的主键都是采用sequence的方式,但是为了程序的移植性,没有采用sequence,而采用了整数类型的字段作为主键,而用<generator class="increment" />使其自动增长,
    但是现在有其他进程要同时操作一个表,就是说hibernate的自动增长的顺序被打断了,造成记录插入不了,现象如下:
    A进程(hibernate)      B(其他进程)
    插入记录1             插入记录2
    插入记录2 or 3???   这里出错了,报主键冲突,无法插入。
    这种情况该怎么解决?   谢谢大家的帮助,不过好象只有interpb(曾曾胡,深怕情多累美人!!!) 的答复有点跟我的意思接近。
      

  9.   

    to:Eddie_Lau(努力,加油)
    因为我以前在sqlserver里一直没能设置成功自动增长;
    多谢!我再去试试。
      

  10.   

    那你可以每次插人数据的时候就去获得ID的最大值,再把ID+1。这样的就能够保证你查入的不是乱码,而且也不要自动增长了。你可以试试~