2 u013234356 u013234356 于 2015.06.14 07:28 提问

数据库中更新信息时,id要相同(id为主键),可以办到吗?

如题,我现在报这个错误:org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.bysj.songxy.domain.Teachers#2]
我用的是springmvc架构
DAO层:
public void update(T o){
getSession().update(o);
}

service层:
public ResultBase update(Long id,String password) {
ResultBase ret = new ResultBase();
Teachers teachers = new Teachers();
teachers.setId(id);
teachers.setPassword(Md5Util.md5Others(password));
teachersDAO.update(teachers);
ret.setResult(ResultBase.RESULT_SUCC);
return ret;
}

controller层:
public String goTpasswordchange(Long id,String oldpassword,String password, ModelMap map){

Teachers teachers = teachersService.findById(id);
map.addAttribute("id", id);
String Mpasseord=Md5Util.md5Others(oldpassword);
System.out.println(Mpasseord);
System.out.println(teachers.getPassword());
if(teachers.getPassword().equals(Mpasseord)){
teachersService.update(id,password);
System.out.println("修改成功");
return "main/Tindex";
}
else{
System.out.println("修改失败");
return "main/Tpasswordchange";
}
}

有木有大神知道怎么修改?很急,在线等

8个回答

u013234356
u013234356   2015.06.14 08:12

顶一下,有木有大神T T

jiuqiyuliang
jiuqiyuliang   2015.06.14 08:14

数据库中更新信息时,id要相同(id为主键),是什么意思?更新操作,主键是唯一,不变的,怎么要相同呢

jiuqiyuliang
jiuqiyuliang 回复不常发疯的疯子: 在实体对象上使用了@id的注解了吗?id怎么可能为空呢
2 年多之前 回复
u013234356
u013234356 回复于亮: 把这句注掉之后,出现这个错误org.hibernate.TransientObjectException: The given object has a null identifier: com.bysj.songxy.domain.Teachers
2 年多之前 回复
jiuqiyuliang
jiuqiyuliang teachers.setId(id);把这句注掉,不要
2 年多之前 回复
jiuqiyuliang
jiuqiyuliang 回复不常发疯的疯子: 当然能啊,把对象查出来,把这个对象的密码改了set一下,不要修改ID值,然后调取更新操作就行了。
2 年多之前 回复
u013234356
u013234356 就是我要更新一个人的信息,比如修改密码,这时我想让这个人的ID不变,这个没办法办到吗?
2 年多之前 回复
u013234356
u013234356   2015.06.14 08:28

就是我要更新一个人的信息,比如修改密码,这时我想让这个人的ID不变,这个没办法办到吗?

u012216727
u012216727   Ds   Rxr 2015.06.14 08:45

update student set password="123456" where id="22";
你通过这样的就可以修改密码了,id是主键是不会改变的;如果是多个就如下:
update student set (name,age,password) values("李四",23,"123456") where id="22";
你可以试试,上面是根据你的解释写的

如果回答对你有帮助,请采纳。

u012216727
u012216727 从前台传就从前台传啊,这有什么问题吗,你最终不还要映射到后台吗,如果说你是不知道修改数据库里的哪条数据你就将id一起传过去不久得了
2 年多之前 回复
u013234356
u013234356 我的密码是要从前台页面传过来的
2 年多之前 回复
wangxiaoyan1234
wangxiaoyan1234   2015.06.14 10:17

你确定id字段你设计为primary key了吗?

u013370108
u013370108   2015.06.14 10:36

student.setPassword("123456");
studentService.update(student);

u013234356
u013234356   2015.06.14 14:54

已经解决了,谢谢大家了

zhi_ai_yaya
zhi_ai_yaya   Rxr 2015.06.15 09:37

原则上,更新是更新所有字段,但只改变不同的值呀。所以ID你不去动它,它还是原来的值。

Csdn user default icon
上传中...
上传图片
插入图片