请教一上。小弟我用hibernate做查找时候 出现空指向
请问一下。。我用hibernate做查找时候 出现空指向?
现在的问题是。如果这两个分开写 就会出现空指向异常
但是如果 写在一个方法里
也就是这样
求各位大神帮忙啊
------解决方案--------------------
请问楼主,你分开写的时候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 传到下一个方法里直接用就不会空了
------解决方案--------------------
- 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 传到下一个方法里直接用就不会空了
------解决方案--------------------