DB에 데이터 존재 여부를 확인하고 업데이트 할 때까지 Spring (또는 Hibernate)에 문제가 있습니다. 사용자 프로필을 업데이트하고 이름, 비밀번호 및 이메일 필드를 변경할 수 있습니다. 이름과 비밀번호는 고유하지 않아야하며 이메일은 필수 항목입니다. 사용자의 이전 데이터로 채워진 필드가있는 양식을 표시합니다. 변경하지 않은 새 데이터를 입력하면 전자 메일은 물론 그것이 이미 있음을 보여줍니다. 이 수표를 지우면 두 개의 동일한 전자 메일을받습니다. 특정 사용자에 대해 동일한 데이터를 설정하려면 어떻게해야합니까?봄 (최대 절전 모드) 업데이트 문제
이메일을 확인하는 내 업데이트 방법입니다.
public void updateUser(User user) throws NotUniqueEmailException {
if (user == null) {
throw new NullPointerException();
}
if (user.getUserId() < 1) {
throw new IllegalArgumentException();
}
if (user.getEmail() == null || user.getEmail().intern().equals("")) {
throw new IllegalArgumentException();
}
if (getUserByEmail(user.getEmail()).getEmail() != null) {
throw new NotUniqueEmailException("The email of user not unique! " + user.getEmail());
}
currentSession().update(user);
// currentSession().saveOrUpdate(user);
}
그리고 존재를 확인하는 방법이 하나 더 있습니다.
는public boolean isEmailExists(User user) {
Session session = HibernateUtil.openSession();
boolean result = true;
Query query = session.createQuery("SELECT u FROM User u WHERE u.email=?");
query.setString(0, user.getEmail());
User u = (User) query.uniqueResult();
if (u == null) {
result = false;
}
return result;
}
는 업데이트 컨트롤러는
@RequestMapping(value = "/edit/{userId}", method = RequestMethod.GET)
public String updateView(@PathVariable("userId")Integer userId,
UserForm userForm,
HttpSession session,
ModelMap model){
User user=userService.getUserById(userId);
userForm.setUser(user);
model.addAttribute("userForm",userForm);
return"profileupdate";
}
@RequestMapping(value = "/edit.do/{userId}", method = RequestMethod.POST)
public String updateUserProcess(@ModelAttribute(value = "userForm")
UserForm userForm,
@PathVariable("userId")Integer userId,
BindingResult result,Model model,
HttpSession session,
HttpServletRequest request){
User user=userService.getUserById(userId);
session.getAttribute("userForm");
model.addAttribute("userForm",userForm);
updateValidator.validate(userForm,result);
if(result.hasErrors()){
logger.error("Validation error");
return"profileupdate";
}
return updatingUser(userForm,user,model,request);
}
private void fillForm(UserForm userForm,User user){
userForm.setUserId(user.getUserId());
userForm.setLogin(user.getLogin());
userForm.setRegDate(user.getRegDate());
userForm.setComputers(userService.getAllUsersComputers(user.getLogin()));
userForm.setRole(roleService.findByName(user.getRole().getRoleName()));
}
private String updatingUser(UserForm userForm,User user,Model model,HttpServletRequest request){
fillForm(userForm,user);
user=userForm.getUser();
try{
userService.updateUser(user);
logger.info("User updated!");
request.getSession().setAttribute("user",user);
return"newprofile";
}catch(NotUniqueEmailException e){
logger.error("Can't update user - not unique email!!",e);
model.addAttribute("errorMsg","Email is already in use!");
return"profileupdate";
}
}
사용자의 기본 키는 무엇입니까? –
전자 메일 사용자가 이미있는 경우 레코드를 업데이트 할 수 있습니다. –
@ Serge Ballesta PK는 사용자의 ID입니다. – Devour