如何防止在我的数据库中同时保存2个相同的对象?以及如何测试此版本是否正常工作?

时间:2015-07-14 10:49:47

标签: java hibernate concurrency account accountmanager

我们有一个门,每辆车提交他的卡,然后我们减少他的帐户。

有些时候,当门务员打开拖车标签时,我们的数据库中有两个交换保存,而且在我们的数据库中,两个账户交换减少了两次,并且两个账户交换保存在我们的数据库中。

请帮助我知道如何阻止在我的数据库中保存2个相同的Exchange。 我如何测试这个版本是否正常工作?

我在我的程序中使用版本,如:
@Version private Long version = 0l 但是当我在ui中更改帐户时,此版本不会增加。在所有条件下,所有版本都保持为零。我不知道为什么会出现这个问题?

2 个答案:

答案 0 :(得分:0)

写入数据库时​​可能会保存时间戳。每次更改记录之前,您都可以检查最后一次更改是否超过10秒 - 或者您的应用程序的任何时间差都是合理的。

答案 1 :(得分:0)

您可以在表中添加一个名为“version”的额外字段。默认情况下,它为0.每次获得对象时,都会在本地对象上将此版本增加1。如果要保存它,请使用ID = xxx和version = localversion-1替换对象。如果您找不到具有此条件的任何对象,则其他人已将其保存,因此版本已增加1。

也许Hibernate确实包含了这个,但不要引用我的话。

编辑: 我使用@version注释使Hibernate处理它。但我不知道是否需要进一步配置。