hibernate 自增主键冲突问题

lemon520 2006-08-12 04:36:22
问题是这样的:
oracle数据库
表A的id字段不是自增字段,采用hibernate的
<id name="id" type="long">
<column name="ID" precision="6" scale="0" />
<generator class="increment" />
</id>
使它成为自动增长的字段。只使用hibernate插入可以不出错误。
但是另一个程序同样要操作这个表,而且使用jdbc插入记录,插入时采用先取max(id)+1作为新记录的id,从而保证id值不会重复。但是,在jdbc应用插入一条记录后,hibernate在插入的时候就会报错了。
哪位大侠给讲讲这个问题该怎么解决啊?hibernate怎么这么弱哦?
...全文
963 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluesky23 2006-08-16
  • 打赏
  • 举报
回复
mark,up
z_qingguo2008 2006-08-15
  • 打赏
  • 举报
回复
那你可以每次插人数据的时候就去获得ID的最大值,再把ID+1。这样的就能够保证你查入的不是乱码,而且也不要自动增长了。你可以试试~
lemon520 2006-08-14
  • 打赏
  • 举报
回复
各位,可能我说得不够清晰,本来所有的表的主键都是采用sequence的方式,但是为了程序的移植性,没有采用sequence,而采用了整数类型的字段作为主键,而用<generator class="increment" />使其自动增长,
但是现在有其他进程要同时操作一个表,就是说hibernate的自动增长的顺序被打断了,造成记录插入不了,现象如下:
A进程(hibernate) B(其他进程)
插入记录1 插入记录2
插入记录2 or 3??? 这里出错了,报主键冲突,无法插入。
这种情况该怎么解决?

谢谢大家的帮助,不过好象只有interpb(曾曾胡,深怕情多累美人!!!) 的答复有点跟我的意思接近。
YuLimin 2006-08-14
  • 打赏
  • 举报
回复
用oracle的sequence
badiwd1216 2006-08-14
  • 打赏
  • 举报
回复
to:Eddie_Lau(努力,加油)
因为我以前在sqlserver里一直没能设置成功自动增长;
多谢!我再去试试。
「已注销」 2006-08-13
  • 打赏
  • 举报
回复
to badiwd1216()
SQL Server2000 是可以设置主键自动增长的!
使用 identity
best_threewood 2006-08-13
  • 打赏
  • 举报
回复
mark
wangx1949 2006-08-13
  • 打赏
  • 举报
回复
用oracle的sequence机制就没用题了吧
badiwd1216 2006-08-12
  • 打赏
  • 举报
回复
SQL Server2000里也不能设置主键自动增长吧
flyingdancing2005 2006-08-12
  • 打赏
  • 举报
回复
可用native
interpb 2006-08-12
  • 打赏
  • 举报
回复
increment
用于为long, short或者int类型生成 唯一标识。只有在没有其他进程往同一张表中插入数据时才能使用。

最好换一个生成的方式吧
z_qingguo2008 2006-08-12
  • 打赏
  • 举报
回复
还有就是,这不是hibernate的问题,问题出在你使用的数据库..
z_qingguo2008 2006-08-12
  • 打赏
  • 举报
回复
oracle数据库里的主健能自动增长吗?在我的记忆里是不能的,你要使oracle里主健能自动增长,必须在搞个序列.在序列自动增长.每插入一条数据时,再到序列里去取ID 这样才能使用<generator class="increment" /> 要不就不可能插得进....
   如果你换个数据库,就没这个问题了,可在oracle中不能用。......
W_Cracker 2006-08-12
  • 打赏
  • 举报
回复
Hibernate 可以用UUID.hex 自动生成主键,生成不会重复的32位
字符串
lemon520 2006-08-12
  • 打赏
  • 举报
回复
id字段是主键,hibernate插入时报主键冲突了。

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧