省略了其它不重要的代码,其它代码和hibernate等等配置文件全部正确,
以下写法省略了导入包等,只给出主要代码public final class HibernateUtil {
private static SessionFactory sf;
public static SessionFactory getSf() {
return sf;
}
private HibernateUtil(){
}
static {
Configuration cfg=new Configuration();
cfg.configure();
SessionFactory sf=cfg.buildSessionFactory();
}
public static Session getSession(){
return getSf().openSession();
}
}
测试类public static void main(String[] args) {
User u=new User();u.setName("zhouxiao");
adduser(u);
}
static void adduser(User u){
Session s=null;
Transaction ts=null;
try{
s=HibernateUtil.getSession();
ts=s.beginTransaction();
s.save(u);
ts.commit();
}catch(HibernateException e){
throw e;
}finally{
if(s!=null){
s.close();
}
}
}}
运行这个测试类出现错误,好像是 nullpoint之类的错误,
但是如果测试类的主要方法改成:
Configuration cfg=new Configuration();
cfg.configure();
SessionFactory sf=cfg.buildSessionFactory();Sessin s=sf.openSession();
Transaction ts=s.beginTransaction(); User u=new User();u.setName("..");
s.save(u);
ts.commit();s.close();
其实总结地说:就是如果是用测试方法,自己的Configuration创建的Session,就能成功,
如果使用 HibernateUtil产生的Session,就提示空指针异常....但是我的语法,完全不可能错啊,我好歹也学java几年了,现在只是复习一下几年前学的东西....
以下写法省略了导入包等,只给出主要代码public final class HibernateUtil {
private static SessionFactory sf;
public static SessionFactory getSf() {
return sf;
}
private HibernateUtil(){
}
static {
Configuration cfg=new Configuration();
cfg.configure();
SessionFactory sf=cfg.buildSessionFactory();
}
public static Session getSession(){
return getSf().openSession();
}
}
测试类public static void main(String[] args) {
User u=new User();u.setName("zhouxiao");
adduser(u);
}
static void adduser(User u){
Session s=null;
Transaction ts=null;
try{
s=HibernateUtil.getSession();
ts=s.beginTransaction();
s.save(u);
ts.commit();
}catch(HibernateException e){
throw e;
}finally{
if(s!=null){
s.close();
}
}
}}
运行这个测试类出现错误,好像是 nullpoint之类的错误,
但是如果测试类的主要方法改成:
Configuration cfg=new Configuration();
cfg.configure();
SessionFactory sf=cfg.buildSessionFactory();Sessin s=sf.openSession();
Transaction ts=s.beginTransaction(); User u=new User();u.setName("..");
s.save(u);
ts.commit();s.close();
其实总结地说:就是如果是用测试方法,自己的Configuration创建的Session,就能成功,
如果使用 HibernateUtil产生的Session,就提示空指针异常....但是我的语法,完全不可能错啊,我好歹也学java几年了,现在只是复习一下几年前学的东西....
static {
....
sf=cfg.buildSessionFactory();
...
} 试试看
public class HibernateUtils { private static SessionFactory factory; static {
try {
Configuration cfg = new Configuration().configure();
factory = cfg.buildSessionFactory();
} catch (Exception e) {
e.printStackTrace();
}
} public static SessionFactory getSessionFactory() {
return factory;
} public static Session getSession() {
return factory.openSession();
} public static void closeSession(Session session) {
if (session != null) {
if (session.isOpen()) {
session.close();
}
}
}
}hibernate.cfg.xml要在src根下才能加载
谢谢各位。 答案在三楼!对的。 是static块中 ,去掉 SessionFactory 这个定义,
直接是sf=cfg.buildSessionFactory();