当前位置: 代码迷 >> J2EE >> 请教一上。小弟我用hibernate做查找时候 出现空指向
  详细解决方案

请教一上。小弟我用hibernate做查找时候 出现空指向

热度:41   发布时间:2016-04-22 00:46:27.0
请问一下。。我用hibernate做查找时候 出现空指向?
Java code
public void create() {        Configuration cfg = new Configuration();        cfg.configure();        SessionFactory sf = cfg.buildSessionFactory();        Session s = sf.openSession();        System.out.println("增加");        s = sf.openSession();        Transaction tx = s.beginTransaction();// 开启事务        User user = new User();        user.setName("张三");        user.setPassword("1234");        s.save(user);        tx.commit();        s.close();    }//这是添加的代码

Java code
public void selectId() {        Configuration cfg = new Configuration();        cfg.configure();        SessionFactory sf = cfg.buildSessionFactory();        User user = new User();        user.setName("张三");        user.setPassword("1234");            System.out.println("查找");        Session s = sf.openSession();        System.out.println("打印一下user.getID():"+user.getId());        User use1 = (User) s.get(User.class, user.getId());// 调用get方法        if (use1 == null) {            System.out.println("三蛋你妹啊,这怎么还是空的啊");        } else {            System.out.println("ID:" + use1.getId());// 获取其中的属性            System.out.println("NAME:" + use1.getName());            System.out.println("AGE:" + use1.getPassword());        }        s.close();    }//这是查找的代码

现在的问题是。如果这两个分开写 就会出现空指向异常 
但是如果 写在一个方法里
也就是这样 
Java code
public void selectId() {        Configuration cfg = new Configuration();        cfg.configure();        SessionFactory sf = cfg.buildSessionFactory();        Session s = sf.openSession();        System.out.println("增加");        s = sf.openSession();        Transaction tx = s.beginTransaction();// 开启事务        User user = new User();        user.setName("张三");        user.setPassword("1234");        s.save(user);        tx.commit();        s.close();        System.out.println("查找");        s = sf.openSession();        System.out.println("打印一下user.getID():" + user.getId());        User use1 = (User) s.get(User.class, user.getId());// 调用get方法        if (use1 == null) {            System.out.println("三蛋你妹啊,这怎么还是空的啊");        } else {            System.out.println("ID:" + use1.getId());// 获取其中的属性            System.out.println("NAME:" + use1.getName());            System.out.println("AGE:" + use1.getPassword());        }        s.close();    }//这样的话 增加 和查看在一起 了 就没有空异常了这是为什么呢 我想了2天没想明白。。=

求各位大神帮忙啊

------解决方案--------------------
请问楼主,你分开写的时候System.out.println("打印一下user.getID():" + user.getId());
能得到id的值吗?

------解决方案--------------------
看来你对对象还不够理解。。。我讲述给你听吧!首先你这个出现问题的原因是。。。你查找的对象里面不存在这个id,那当然取出来是空的对吧,System.out.println("打印一下user.getID():" + user.getId());,而你和在一起写为什么能够取到值呢?是因为你查询返回的对象存在这个id所以就没有报空指针了!对于你这个解决方案有你的查询不要根据id来查你可以选择名字或者密码!这样的话就不会报空指针了User use1 = (User) s.get(User.class, user.getId());// 调用get方法

------解决方案--------------------
就一句话:楼主不清楚hibernte的几种状态(瞬时对象,持久对象,脱管对象),学了就知道为啥了
------解决方案--------------------
应为你的Configuration new了2个不是一个东西,你把上一个方法的Configuration 传到下一个方法里直接用就不会空了
------解决方案--------------------
  相关解决方案