public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
public List<Users> findUserById(int id){
return super.getHibernateTemplate().find("from Users u where u.id=?",id);
}
public void update(Users user){
super.getHibernateTemplate().update(user);
}
public static void main(String[] args){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao dao = (UserDao) ac.getBean("userDao");
Users user = new Users();
user.setId(2);
List<Users> list = dao.findUserById(user.getId());
// for(Users users:list){
// System.out.println(users.getUsername());
// }
user.setUsername("123");
dao.update(user);
}
}
更新后就变成这样了,请问问题出在哪里,应该怎样修改
不要叫我写成这样user = dao.findUserById(user.getId()).get(0); user.setUsername("123");,因为上面测试的代码要写在action类的
------解决方案--------------------
Users user = new Users(); user是new出来的,字段均为空,下面你set了几个字段,剩余字段便都是空了
看你的代码,你可能是想从list中查找id 为2的user,然后update它的username为123
这样的话,代码要做修改
UserDao dao = (UserDao) ac.getBean("userDao");
Users user = new Users();
user.setId(2);
List<Users> list = dao.findUserById(user.getId());
user = list.get(0); // 让user指向新查找出来的user,也就是 list.get(0)
System.out.println(user.getUsername());
user.setUsername("123");
dao.update(user);
------解决方案--------------------
其实很简单,SSH在update的时候每个属性都要有值的,你确认值有没有被初始化,或者说哪个环节属性被修改了就可以了!
------解决方案--------------------
那你debug 看下,其他的估计是null
------解决方案--------------------
Users user = new Users();
user.setId(2);
List<Users> list = dao.findUserById(user.getId());
// for(Users users:list){
// System.out.println(users.getUsername());
// }
user.setUsername("123");
dao.update(user);
很明显,你新new 了一个 Users user = new Users();而你只给这个心new的user赋予了两个set值 user.setId(2); user.setUsername("123");其他字段当然为null
------解决方案--------------------
user.setUsername("123");
dao.update(user);
楼主更新的是自己new的那个对象,当然别的属性为空了
------解决方案--------------------
你的user是NEW出来的,然后你set的属性也是new出来的USER
new出来的User除了几个你SET的属性,其他值都是空的,
如果你要改查出来的user属性应该从list里面拿出user修改了,然后在update进去
------解决方案--------------------
new User的时候 要将user里的所有属性全部都set一遍 这样数据库里才会有值啊
------解决方案--------------------
insert-update 可以设置为false
因为hibernate 在更新的时候,如果你属性没有值的话,默认会给你一个null的值
------解决方案--------------------
二楼很对。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
------解决方案--------------------
正如2楼说的原因,mybatis里面可以在sql里面加判断,hibernate不知道如何处理,不过应该可以配置
------解决方案--------------------
ssh是不需要new对象的 、
new对象没执行一次
就会清空一次