Thursday, 15 May 2014

java - Spring (Hibernate) uptading issue -



java - Spring (Hibernate) uptading issue -

i have issue in spring (or hibernate) checking info existence in db till updating. want update user’s profile , can alter name, password , email fields. name , password hasn’t unique email has to. show form fields filled user’s old data, when come in new info not changing email it, of course, shows exists. if delete check i’ll have 2 same emails in base. how can set same info user?

my method update checking email.

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); }

and i’ve 1 more method checking existence.

public boolean isemailexists(user user) { session session = hibernateutil.opensession(); boolean result = true; query query = session.createquery("select u user u u.email=?"); query.setstring(0, user.getemail()); user u = (user) query.uniqueresult(); if (u == null) { result = false; } homecoming result; }

update controller

@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"; } homecoming 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 in use!"); return"profileupdate"; } }

edit : add together elements hibernate persistence methods

if want hibernate automagically know should an update , not insert, primary key has set in user. fields have been modified, suppose user fields come form input. have 2 ways maintain id :

store in hidden input field in form - on submit, spring populate it have in path variable, in controller , populate (@requestmapping(/.../{id}) public string method(@pathvariable("id") user_id, ...))

but may not plenty , have merge vs update vs saveorupdate problem. other post give indications hibernate : downside of merge on update

java spring hibernate email spring-mvc

No comments:

Post a Comment