在独立应用程序中的hibernate中配置sessionFactory

我正在尝试制作第三方简单的独立/ swing应用程序,它使用hibernate连接数据库以用于另一个应用程序,所以这就是我所做的:

1-使用的jar子:

hibernate-core-3.5.1-Final hibernate-entitymanager-3.5.1-Final hibernate-jpa-2.0-api-1.0.0.Final hibernate-annotations-3.5.1-Final hibernate-commons-annotations-3.2.0.Final dom4j-1.6.1 slf4j-api-1.6.4 slf4j-log4j12-1.6.4 log4j-1.2.16.jar commons-collections-3.2 jta-1.1 mysql-connector-java-5.1.14 (or compatible connector with your DB) commons-logging-1.1.1 commons-collections-3.2 

2- hibernate.cfg.xml(它在src文件夹中):

     true true com.mysql.jdbc.Driver jdbc:mysql://127.0.0.1:3306/myapp myuser mypass org.hibernate.dialect.MySQLDialect thread   

3- SessionFactoryHelper:

 public class SessionFactoryHelper { private static final SessionFactory sessionFactory; static { try { /* * Build a SessionFactory object from session-factory configuration * defined in the hibernate.cfg.xml file. In this file we register * the JDBC connection information, connection pool, the hibernate * dialect that we used and the mapping to our hbm.xml file for each * POJO (Plain Old Java Object). */ sessionFactory = new Configuration().configure() .buildSessionFactory(); } catch (Throwable e) { System.err.println("Error in creating SessionFactory object." + e.getMessage()); throw new ExceptionInInitializerError(e); } } /* * A static method for other application to get SessionFactory object * initialized in this helper class. */ public static SessionFactory getSessionFactory() { return sessionFactory; } } 

4-样本查询:

 Session session = SessionFactoryHelper.getSessionFactory() .getCurrentSession(); session.beginTransaction(); int count = (Integer) session.createSQLQuery( "select count(*) from users").uniqueResult(); session.getTransaction().commit(); System.out.println("Users Count: " + count); 

运行应用程序时,我得到以下exception:

 Error in creating SessionFactory object.invalid configuration Exception in thread "main" java.lang.ExceptionInInitializerError at com.xeno.xecamp.desktopManagement.SessionFactoryHelper.(SessionFactoryHelper.java:24) at com.myapp.Main.main(Main.java:9) Caused by: org.hibernate.MappingException: invalid configuration at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1579) at org.hibernate.cfg.Configuration.configure(Configuration.java:1520) at org.hibernate.cfg.Configuration.configure(Configuration.java:1506) at com.xeno.xecamp.desktopManagement.SessionFactoryHelper.(SessionFactoryHelper.java:19) ... 1 more Caused by: org.xml.sax.SAXParseException: Document is invalid: no grammar found. at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195) at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:131) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:384) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:318) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:250) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:626) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3103) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:922) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522) at org.dom4j.io.SAXReader.read(SAXReader.java:465) at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1576) ... 4 more 

任何人都可以告诉我我的配置有什么问题?

该问题与Hibernate完全无关,只与XML结构有关。

SAX Reader由Hibernate设置为使用validation(org.hibernate.util.XMLHelper #createSAXReader(String,List,EntityResolver)

它更像是这样的:

 SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setValidating(true); factory.setNamespaceAware(true); 

Java dosc说

方法setValidating(boolean) – 请求DTDvalidation,如果不存在DTD则导致失败。 如果您只想要架构validation而不是DTDvalidation,那么请使用setValidating(false)。

你的错误说清楚了:

Caused by: org.xml.sax.SAXParseException: Document is invalid: no grammar found.

在本教程中,您将找到有关hibernate conf文件的所有必需信息。

修复它你需要添加:

  

您没有在hibernate.cfg.xml中声明任何DTD

 The message is saying that you are trying to validate the document, but no DTD has been declared, because no DOCTYPE declaration is present.