请考虑以下事件:-
更新用户[id = 1,城市=孟买,电话= 56789]
对于CREATE操作,这是存储在数据库中的内容:-
[id=1, name=Ram, city=Delhi, email=abc@gmail.com, phone=12345]
但是,当我执行UPDATE操作时,未更新的字段将为空
[id=1, name=null, city=Mumbai, email=null, phone=56789]
现在,我的问题是如何防止姓名和电子邮件变为NULL?
这是代码段:-
实体类:-
@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 {
/* 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;
}
}
答案 0 :(得分:1)
您的代码无法正常运行。对于Spring,实际上是这样的:
Spring Repository的工作原理是这样的,如果您使用NULL ID保存对象,它将添加它。如果您保存具有给定id的对象,它将更新所有已更改的值。因此,在春季,您实际上更新了每个字段,其中一些字段用于新值,而大多数字段用于NULL。 MORE INFO
您应该获取要通过第一个保存函数返回的对象,然后再次对其进行更新。像这样:
@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;
}
}