Операции CREATE и UPDATE в параллельной обработке с использованием репозитория CRUD

Я разрабатываю приложение, в котором я получаю два события от восходящей системы, то есть СОЗДАЙТЕ и ОБНОВИТЬ. Теперь рассмотрим следующие события:

 1. CREATE User [id=1, name=Ram, city=Delhi, [email protected], 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 protected], phone=12345]

Но я хотел, чтобы при выполнении СОЗДАТЬ операцию были вставлены только значения, которые были нулевой после первого ОБНОВЛЕНИЕ. Но СОЗДАТЬ операцию перезаписывает обновленные поля, и, следовательно, обновления теряются. Итак, в основном, это то, что я ожидаю в качестве результата после ОБНОВИТЬ и INSERT операции: -

[id=1, name=Ram, city=Mumbai, [email protected], phone=56789]

My question is that how do I achieve this ?

Note: I am using CRUD Repository and prefer a solution which uses CRUD Repository only for database operations.



Вот фрагмент кода: -

  1. Класс сущности: -

    @Entity
    public class User {
    
    @Id
    private Integer id;
    private String name;
    private String city;
    private String email;
    private String phone;
    
    //Setters and Getters 
    }
    
  2. Репозиторий: -

    import org.springframework.data.repository.CrudRepository;
    import com.therealdanvega.domain.User;
    
    public interface UserRepository extends CrudRepository<User, Integer>{
    
    }
    
  3. Класс приложения: -

        @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 protected], phone=12345]
    
        }
    
        public User createUser(User user) {
            user.setId(1);
            user.setName("Ram");
            user.setCity("Delhi");
            user.setEmail("[email protected]");
            user.setPhone("12345");
            return user;
        }
    
        public User updateUser(User user) {
            user.setId(1);
            user.setCity("Mumbai");
            user.setPhone("56789");
            return user;
            }
        }
    

Вы создаете класс RestController и создаете два метода и карту с PostMapping и GetMapping.

Ng Sharma 21.10.2018 11:11
spring.io/guides/tutorials/bookmarks
Ng Sharma 21.10.2018 11:14
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
413
1

Ответы 1

Начиная с Java 8 появилась возможность добавлять в интерфейсы методы по умолчанию. Вы можете добавить в UserRepository метод по умолчанию, например:

default <S extends User> S safeSave(S entity) {
    // your checks and entity manipulation, like:
    // check if exists already and fill fields accordingly
    // finally save the correct data
    return save(entity);
}

Другие вопросы по теме