我有一个Java应用程序,负责根据从外部队列(兔子MQ)接收到的消息来更新数据库。 该应用程序正在使用休眠模式与其数据库进行交互。
该进程是多线程的,并且可能同时接收多个消息以针对DB中的单个记录进行更新(其中一条记录是id + progress的组合)。 例如,它可能会收到消息A:id为23的进度10 消息B:id为23的进度20。 因此,可能会以错误的顺序更新数据库(在本例中为B-> A)。
要解决此问题,我对以下解决方案的想法是什么,想知道它是否是常规的,如果不是,是否有更好的方法来解决此问题?
第一步是在应用程序收到的消息对象中创建2个新字段。 计数器:代表消息的计数器(默认值为0)。 版本:将使用hibernate @Version注释进行悲观锁定。
填充这些消息的服务器将相应地设置每个消息的计数器,并且在用于更新数据库的休眠查询中,将考虑此字段(“ id = msg.id and counter
是否有“更好”的方法来实现此结果?休眠可能提供类似于@Version字段的功能,让用户控制值吗?