2011-08-06 77 views
0

原子操作我必须做这个任务:在DB写入记录之前休眠

1- Read a max value of a field from a table 
2- use this value to create new record 
3- save the record 

在步骤1中的值必须是唯一的。

问题是这个任务可以由不同的客户端完成。

使这种操作成为原子的最佳方式是什么?

感谢所有。

回答

0

我的建议: - 为表格的字段添加唯一约束 - 使用Hibernate选择最大值,将值分配给实体并保存。

+0

当然,字段具有唯一的约束,并且不同的客户端可以选择相同的值并尝试保存它,这是问题所在。 – blow

+0

第一个客户端将保存数据,第二个客户端将获得异常(唯一约束违规),这就是重点。但是,如果你想避免这些错误,你必须使用某种独特的密钥生成器(例如,Oracle中的序列,初始值为max(table.value)) – never

+0

我需要实现这一点而不会引发异常,但谢谢。 – blow