问题描述
package com.yuqidi.mapping;import java.util.Iterator;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.AnnotationConfiguration;import org.hibernate.tool.hbm2ddl.SchemaExport;import org.junit.AfterClass;import org.junit.BeforeClass;import org.junit.Test;public class mappingTest {private static SessionFactory sessionFactory;@BeforeClasspublic static void beforeClass() {new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();}@AfterClasspublic static void afterClass() {sessionFactory.close();}@Testpublic void testSaveGroup() {User u1 = new User();u1.setName("u1");User u2 = new User();u2.setName("u2");Group g = new Group();g.setName("g1");g.getUsers().add(u1);g.getUsers().add(u2);u1.setGroup(g);u2.setGroup(g);Session s = sessionFactory.getCurrentSession();s.beginTransaction();s.save(g);s.getTransaction().commit();}@Testpublic void testGetGroup(){testSaveGroup();Session s = sessionFactory.getCurrentSession();s.beginTransaction();Group g=(Group)s.get(Group.class, 0);System.out.println(g.getName());s.getTransaction().commit();}@Testpublic void testSchemaExport() {new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);}public static void main(String[] args) {beforeClass();}}用Junit 测试时会报空指针异常;去掉System.out.println(g.getName());可以通过测试,情各位指教 问题补充:soartju 写道
解决方案
1.0 打开的你的数据库 去表 Group 看一下!ID 的值2.0 把ID 放到这个位置引用Group g=(Group)s.get(Group.class, 数据库里面的ID); System.out.println(g.getName()); 然后运行就OK了!
解决方案二:
hibernate 中get与load的问题,,get其初默认数据库有值 ,去查,没有的话为空...如果是load的话就会报错
解决方案三:
Group g=(Group)s.get(Group.class, 0);System.out.println(g.getName()); 报空指针异常,标示g为null,也就是说Group g=(Group)s.get(Group.class, 0);取到的是null,数据库中没有主键为0的记录,你看下数据库对应group的主键id是啥,改一下应该就可以了。
解决方案四:
引用s.beginTransaction(); Group g=(Group)s.get(Group.class, 0); System.out.println(g.getName()); s.getTransaction().commit(); 首先 查询是不需要 事物的 s.beginTransaction(); 应去掉2.0 Group g=(Group)s.get(Group.class, 0); 这样的意思是查询 一个 group 对象出了来! 但是你确定 他的ID 是 0 ? 后面这个参数 ID 哦! 看下库里面是否有呢!