<转>Hibernate错误解决方案

Hibernate错误解决方案
.........
谢谢 db4object
......
2007-01-02 21:42

环境: eclipse 3.1.1 + Hibernate 3.1 +Hibernate Synchronizer-3.1.5

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
org.hibernate.MappingException: invalid configuration
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1369)
at org.hibernate.cfg.Configuration.configure(Configuration.java:1310)
at org.hibernate.cfg.Configuration.configure(Configuration.java:1296)
at net.sc.hibernate.base._BaseRootDAO.initialize(_BaseRootDAO.java:52)
at net.sc.hibernate.base._BaseRootDAO.initialize(_BaseRootDAO.java:41)
at net.sc.hibernate.base._BaseRootDAO.initialize(_BaseRootDAO.java:32)
at HibernateTest.main(HibernateTest.java:10)
Caused by: org.xml.sax.SAXParseException: Document is invalid: no grammar found.
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
at org.apache.xerces.impl.XMLNSDocumentScannerImpl$NSContentDispatcher.scanRootElementHook(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.dom4j.io.SAXReader.read(SAXReader.java:465)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1366)
... 6 more

1、首先没有配置日志:
   1)把log4j的jar加进构建路径
   2)Hibernate解压后etc目录下面的log4j.properties拷到src(就是放源代码的目录)下即可
2、在配置文件hibernate.cfg.xml前面加上上面这段声明
   <!DOCTYPE hibernate-configuration PUBLIC
      "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
      "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
3、把映射文件userinfo.hbm.xml中的generator生成方式改为native
 <generator class="java.security.Identity"/>
 改为:<generator class="native"/>

4、新的错误:
   org.hibernate.HibernateException: No CurrentSessionContext configured!
 at org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:504)
 at com.kissbi.hibernate.base._BaseRootDAO.getSession(_BaseRootDAO.java:56)
 at com.kissbi.hibernate.base._BaseRootDAO.getSession(_BaseRootDAO.java:42)
 at com.kissbi.hibernate.base._BaseRootDAO.run(_BaseRootDAO.java:761)
 at com.kissbi.hibernate.base._BaseRootDAO.save(_BaseRootDAO.java:623)
 at com.kissbi.hibernate.base.BaseUserInfoDAO.save(BaseUserInfoDAO.java:110)
 at com.kissbi.hibernate.dao.UserInfoDAO.main(UserInfoDAO.java:27)
   这个错误太隐蔽了:
    如果是用hibernate.cfg.xml的话,生成session的方法应该是用以下这种文件
 public static SessionFactory sessionFactory;
 private static Configuration configuration;
 static {

   try {
     configuration = new Configuration();
     sessionFactory = configuration.configure().buildSessionFactory();
   } catch (Throwable ex) {
            throw new ExceptionInInitializerError(ex);
   }
 }
     我们使用如下代码获取Session:
 sessionFactory = new Configuration().configure().buildSessionFactory();
 Session session = sessionFactory.getCurrentSession();
     使用getCurrentSession 不对;应该使用openSession 
      参考hibernate api doc 对 openSession 和 getCurrentSession 的说明

你可能感兴趣的:(java,apache,log4j,Hibernate,.net)