sessionFactory为Null!!!

choiwanxy 2011-09-30 12:58:34
package com.choiwan;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateDemo
{
public static void main(String args[]) {
//Configuration负责管理Hibernate配置消息
Configuration config=new Configuration().configure();
//根据config建立SessionFactory
//SessionFactory将用于建立 Session
//@SuppressWarnings("deprecation")
SessionFactory sessionFactory=config.buildSessionFactory();

IUserDAO userDAO=new UserDAO(sessionFactory);

User user=new User();
user.setName("caterpillar");
user.setAge(new Integer(22));

userDAO.insert(user);
user=userDAO.find(new Integer(1));

System.out.println("name:"+user.getName());
}

}

hibernate.cfg.xml:
<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
<property name="show_sql">
true
</property>

<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>

<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>

<property name="connection.url">
jdbc:mysql://localhost/demo
</property>

<property name="connection.username">
root
</property>

<property name="connection.password">
4131025
</property>

<!-- 以下设置对象与数据库表格的映射文件 -->
<mapping resource="com/choiwan/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>

错误如下:
2011-09-30 00:56:19,067 WARN [org.hibernate.internal.util.xml.DTDEntityResolver] - HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
2011-09-30 00:56:19,161 WARN [org.hibernate.internal.util.xml.DTDEntityResolver] - HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
Exception in thread "main" java.lang.NullPointerException
at com.choiwan.UserDAO.insert(UserDAO.java:26)
at com.choiwan.HibernateDemo.main(HibernateDemo.java:22)
...全文
564 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
yexiongMYBH 2011-09-30
  • 打赏
  • 举报
回复
看着好像是DTD也有错阿。。你去加一个验证DTD为false的试试。好像叫什么validate-dtd 来着,具体有点忘记掉了。
完美灬缺陷 2011-09-30
  • 打赏
  • 举报
回复
将hibernate配置文件中的头文件部分的
http://hibernate.sourceforge.net/修改为 http://www.hibernate.org/dtd/

完美灬缺陷 2011-09-30
  • 打赏
  • 举报
回复
将hibernate配置文件中的头文件部分的
http://hibernate.sourceforge.net/修改为 http://www.hibernate.org/dtd/

coolbamboo2008 2011-09-30
  • 打赏
  • 举报
回复
IUserDAO userDAO=new UserDAO(sessionFactory);
你先看看userDAO是不是null
liuhuanleijava 2011-09-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 huangchenliang 的回复:]
将hibernate配置文件中的头文件部分的
http://hibernate.sourceforge.net/修改为 http://www.hibernate.org/dtd/
[/Quote]
顶!
choiwanxy 2011-09-30
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 oowangfanoo 的回复:]

配置出错了。
[/Quote]
怎么说呢?
oowangfanoo 2011-09-30
  • 打赏
  • 举报
回复
配置出错了。
wtc860104 2011-09-30
  • 打赏
  • 举报
回复
2011-09-30 00:56:19,067 WARN [org.hibernate.internal.util.xml.DTDEntityResolver] - HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
2011-09-30 00:56:19,161 WARN [org.hibernate.internal.util.xml.DTDEntityResolver] - HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
Exception in thread "main" java.lang.NullPointerException
at com.choiwan.UserDAO.insert(UserDAO.java:26)
at com.choiwan.HibernateDemo.main(HibernateDemo.java:22)

看异常看异常
没注意lz贴了异常我了个擦,前面当我没说
choiwanxy 2011-09-30
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wtc860104 的回复:]

所以我的意思就是说没初始化到hibernate.cfg.xml
[/Quote]
那会是什么情况呢,头文件错误?又或者其它他什么
choiwanxy 2011-09-30
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 anhy 的回复:]

UserDAO.java:26是哪一行?
会不是是user=userDAO.find(new Integer(1));使得user为null,然后System.out.println("name:"+user.getName());出NullPointerException
[/Quote]
package com.choiwan;

import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

public class UserDAO implements IUserDAO
{
private SessionFactory sessionFactory;

public UserDAO() {

}

public UserDAO(SessionFactory sessionFacetory) {
this.setSessionFactory(sessionFactory);
}

public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory=sessionFactory;
}

public void insert(User user) {
//取得 Session
Session session=sessionFactory.openSession();
//开户事务
Transaction tx=session.beginTransaction();
//直接储存对象
session.save(user);
//送出事务
tx.commit();
session.close();
}


public User find(Integer id) {
Session session=sessionFactory.openSession();

User user=(User)session.get(User.class,id);
Hibernate.initialize(user);

session.close();

return user;
}
}
这是代码,26行是
Session session=sessionFactory.openSession();
anhy 2011-09-30
  • 打赏
  • 举报
回复
UserDAO.java:26是哪一行?
会不是是user=userDAO.find(new Integer(1));使得user为null,然后System.out.println("name:"+user.getName());出NullPointerException
wtc860104 2011-09-30
  • 打赏
  • 举报
回复
所以我的意思就是说没初始化到hibernate.cfg.xml
choiwanxy 2011-09-30
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wtc860104 的回复:]

Configuration config=new Configuration().configure()初始化正常的话肯定会去解析hibernate.cfg.xml文件
即使你的hibernate.cfg.xml文件写错了,也会报解析错误的异常而不是空指针
[/Quote]
可是这个Configuration config=new Configuration().configure()没 有报错,就是说他能正常工作,为什么sessionFactory会为空呢
难不成是这样:hibernate4.0中方法buildSessionFactory()已被废弃
wtc860104 2011-09-30
  • 打赏
  • 举报
回复
Configuration config=new Configuration().configure()初始化正常的话肯定会去解析hibernate.cfg.xml文件
即使你的hibernate.cfg.xml文件写错了,也会报解析错误的异常而不是空指针
choiwanxy 2011-09-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wtc860104 的回复:]

你这 Configuration config=new Configuration().configure();找到hibernate.cfg.xml这个文件了吗?
[/Quote]
我也想这样问他,新手自觉Spring,疼啊!我觉得sessionFactory根本没初始化到,所以为null,可能像你说的,前面的根本没读到hibernate.cfg.xml
wtc860104 2011-09-30
  • 打赏
  • 举报
回复
你这 Configuration config=new Configuration().configure();找到hibernate.cfg.xml这个文件了吗?
choiwanxy 2011-09-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yexiongmybh 的回复:]

看着好像是DTD也有错阿。。你去加一个验证DTD为false的试试。好像叫什么validate-dtd 来着,具体有点忘记掉了。
[/Quote]
嗯,我看下!
choiwanxy 2011-09-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 huangchenliang 的回复:]

将hibernate配置文件中的头文件部分的
http://hibernate.sourceforge.net/修改为 http://www.hibernate.org/dtd/
[/Quote]
这个试了,没用呢!
choiwanxy 2011-09-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 coolbamboo2008 的回复:]

IUserDAO userDAO=new UserDAO(sessionFactory);
你先看看userDAO是不是null
[/Quote]
嗯 ,就是这句报错,说sessionFactory为null
wangyiyan8877 2011-09-30
  • 打赏
  • 举报
回复
好像后面的配置有点问题把

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧