首页 > 解决方案 > Spring,JPA,Hibernate,按预期数量递增/递减变量

问题描述

我有一个属于实体的Integer变量。numberOfPeople如果一个人加入系统或离开系统,numberOfPeople应该加1或减1。

以下是我这样做的两个片段:

增量:

world.setNumberOfPeople(world.getNumberOfPeople() + 1);

减量:

world.setNumberOfPeople(world.getNumberOfPeople() - 1);

我注意到这会导致意外行为。有时变量会增加,有时会增加超过一,有时会保持不变。

实现预期行为的最佳方法是什么?请注意,这些操作是作为更大方法的一部分发生的,并且此事务服务中正在发生其他事情(其他变量也正在修改)。

标签: springhibernatejpaspring-data-jpa

解决方案


您可以使用AtomicInteger为了增加和减少一个整数值。

//Initial value is 0
AtomicInteger atomicInteger = new AtomicInteger();
atomicInteger.set(world.getNumberOfPeople()); 

或者

//Initial value is getNumberOfPeople()
AtomicInteger atomicInteger = new AtomicInteger(world.getNumberOfPeople());

增量

world.setNumberOfPeople(atomicInteger.incrementAndGet());

减量

world.setNumberOfPeople(atomicInteger.decrementAndGet());

参考 原子整数文档


推荐阅读