我正在开发用Spring Framework 5
编写的应用程序,我也在使用Spring Data
访问PostgreSQL
数据库,但是我遇到一个奇怪的问题,有时查询数据库。
简而言之,我有一个包含myMainFunction
的服务。该函数从控制器中调用,该函数调用myFunction
,后者计算并设置对象的ID。 myFunction
然后还查询数据库以查找数据库中是否已存在具有计算所得ID的对象。
然后myMainFunction
再次查询数据库以获取具有相同ID(如果存在)的对象。这是有时抛出java.lang.IllegalArgumentException: The given id must not be null!
的行。
我不明白为什么会这样,为什么有时而不是一直都在发生?
这是导致问题的“伪代码”:
publi class MyService {
...
public myMainFunction(MyObject object) {
...
myFunction(object);
Optional<MyObject> oldObject = objectRepository.findById(object.getId());
...
}
private void myFunction(MyObject object) {
...
object.setId(calculateId(...));
Optional<MyObject> existingObject = objectRepository.findById(object.getId());
...
}
...
}