当前位置: 代码迷 >> J2EE >> 为啥SSH查询后再update,数据库的其他字段被null覆盖
  详细解决方案

为啥SSH查询后再update,数据库的其他字段被null覆盖

热度:91   发布时间:2016-04-17 23:45:07.0
为什么SSH查询后再update,数据库的其他字段被null覆盖

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对象没执行一次 
就会清空一次
  相关解决方案