Как предотвратить NULL запись в операции UPDATE, используя CRUD Repository? - PullRequest
0 голосов
/ 20 октября 2018

Рассмотрим следующие события: -

  1. СОЗДАТЬ пользователя [id = 1, имя = Рам, город = Дели, email=abc@gmail.com, телефон = 12345]
  2. ОБНОВЛЕНИЕ Пользователь [id = 1, город = Мумбаи, телефон = 56789]

    Для операции CREATE это то, что хранится в базе данных: -

    [id=1, name=Ram, city=Delhi, email=abc@gmail.com, phone=12345]
    

    Однако, когда я выполняю операцию ОБНОВЛЕНИЕ, поля, которые не обновляются, становятся пустыми

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

Теперь мойвопрос заключается в том, как я могу предотвратить использование имени и адреса электронной почты NULL ??



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

  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 {
    
            /* CREATE USER */
            userRepo.save(createUser());
    
            /* UPDATE USER */
            userRepo.save(updateUser());
    
            System.out.println(userRepo.findOne(1));
    
        }
    
        public User createUser() {
            User user = new 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 = new User();
            user.setId(1);
            user.setCity("Mumbai");
            user.setPhone("56789");
            return user;
            }
        }
    

1 Ответ

0 голосов
/ 20 октября 2018

Ваш код не работает так, как вы думаете.Для Spring это действительно что-то вроде этого:

  1. Взять новый объект Пользователь с id = 1, name = Ram ... и поместить его в эту базу.
  2. Возьмите новый объект Пользователь с id = 1, city = Mumbai ... и поместите его в эту базу.

Spring Repository работает так же, если вы сохраняете объект сИДЕНТИФИКАТОР, это добавит это.Если вы сохраните объект с заданным идентификатором, он обновит КАЖДОЕ значение, которое изменилось.Таким образом, для весны вы фактически обновляете каждое поле, некоторые для нового значения и большинство для NULL. ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

Вы должны получить свой объект, возвращаемый функцией первого сохранения, и обновить его снова.Вот так:

@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 {

    /* CREATE USER */
    User user = userRepo.save(createUser(new User()));

    /* UPDATE USER */
    userRepo.save(updateUser(user));

    System.out.println(userRepo.findOne(1));

}

public User createUser(User user) {
    user.setName("Ram");
    user.setCity("Delhi");
    user.setEmail("abc@gmail.com");
    user.setPhone("12345");
    return user;
}

public User updateUser(User user) {
    user.setCity("Mumbai");
    user.setPhone("56789");
    return user;
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...