Я разрабатываю приложение, в котором я получаю два события из вышестоящей системы: CREATE и UPDATE .Теперь рассмотрим следующие события: -
1. CREATE User [id=1, name=Ram, city=Delhi, email=abc@gmail.com, phone=12345]
2. UPDATE User [id=1, city=Mumbai, phone=56789]
Поскольку приложение включает параллельную обработку, следовательно, порядок события не гарантируется, и, следовательно, событие UPDATE может предшествовать событию CREATE.
Если сначала выполняется операция UPDATE, а затем операция CREATE
Для операции UPDATE это то, что хранится в базе данных: -
[id=1, name=null, city=Mumbai, email=null, phone=56789]
Однако, когда я выполняю операцию CREATE,обновленные поля заменяются старыми значениями, и это то, что хранится в базе данных
[id=1, name=Ram, city=Delhi, email=abc@gmail.com, phone=12345]
Но я хотел только значения, которые были null после первой операции UPDATE для вставки при выполнении операции CREATE .Но операция CREATE перезаписывает обновленные поля и, следовательно, обновления теряются.В общем, это то, что я ожидаю в качестве вывода после операций UPDATE и INSERT : -
[id=1, name=Ram, city=Mumbai, email=abc@gmail.com, phone=56789]
Мой вопрос заключается в том, чтоКак мне этого добиться?
Примечание: Я использую CRUD Repository и предпочитаю решение, которое использует CRUD Repository только для операций с базой данных.
Вот фрагмент кода: -
Класс сущности: -
@Entity
public class User {
@Id
private Integer id;
private String name;
private String city;
private String email;
private String phone;
//Setters and Getters
}
Репозиторий: -
import org.springframework.data.repository.CrudRepository;
import com.therealdanvega.domain.User;
public interface UserRepository extends CrudRepository<User, Integer>{
}
Класс применения: -
@SpringBootApplication
public class JsontodbApplication implements CommandLineRunner {
@Autowired
private UserRepository userRepo;
public static void main(String[] args) {
SpringApplication.run(JsontodbApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
/* UPDATE USER */
User user = userRepo.save(updateUser(new User()));
System.out.println(userRepo.findOne(1)); //[id=1, name=null, city=Mumbai, email=null, phone=56789]
/* CREATE USER */
userRepo.save(updateUser(user));
System.out.println(userRepo.findOne(1)); //[id=1, name=Ram, city=Delhi, email=abc@gmail.com, phone=12345]
}
public User createUser(User user) {
user.setId(1);
user.setName("Ram");
user.setCity("Delhi");
user.setEmail("abc@gmail.com");
user.setPhone("12345");
return user;
}
public User updateUser(User user) {
user.setId(1);
user.setCity("Mumbai");
user.setPhone("56789");
return user;
}
}