2012-11-15 33 views
2

我有一個jar庫,有一些類與持久性註釋。我的jar庫中不需要hibernate.cfg.xml,所以我在導入jar的目標項目中創建了hibernate.cfg.xml。我猜這個hibernate.cfg.xml使用配置文件,如any.hbm.xml指定jar中的類在jar庫中存在any.hbm.xml)庫(我想這個解決方案在目標項目的hibernate.cfg.xml中使用<mapping resource="any.hbm.xml"/>)。如何爲jar庫編寫any.hbm.xml以及如何在hibernate.cfg.xml中使用它?使用休眠作爲庫

我寫這篇文章any.hbm.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
    <mapping class="com.test.Vehicle"/> 
    <mapping class="com.test.driver"/> 
</hibernate-mapping> 

這個錯誤是:

Caused by: org.hibernate.InvalidMappingException: Unable to read XML 
    at org.hibernate.internal.util.xml.MappingReader.readMappingDocument(MappingReader.java:109) 
    at org.hibernate.cfg.Configuration.add(Configuration.java:478) 
    at org.hibernate.cfg.Configuration.add(Configuration.java:474) 
    at org.hibernate.cfg.Configuration.add(Configuration.java:647) 
    at org.hibernate.cfg.Configuration.addResource(Configuration.java:730) 
    at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:2109) 
    at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:2081) 
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2061) 
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2014) 
    at org.hibernate.cfg.Configuration.configure(Configuration.java:1929) 
    at org.hibernate.cfg.Configuration.configure(Configuration.java:1908) 
    at ir.mersada.db.HibernateUtil.<clinit>(HibernateUtil.java:22) 
    ... 1 more 
Caused by: org.xml.sax.SAXParseException; lineNumber: 6; columnNumber: 50; Element type "mapping" must be declared. 
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:198) 
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:134) 
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:437) 
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:368) 
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:325) 
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleStartElement(XMLDTDValidator.java:1906) 
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.emptyElement(XMLDTDValidator.java:763) 
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:353) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2717) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607) 
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:116) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:489) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764) 
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123) 
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210) 
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568) 
    at org.dom4j.io.SAXReader.read(SAXReader.java:465) 
    at org.hibernate.internal.util.xml.MappingReader.readMappingDocument(MappingReader.java:78) 
    ... 12 more 

回答

3

我覺得persistence.xml中是一個更好的選擇。

<persistence xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> 
    <persistence-unit name="UNIT_NAME" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
     <class>com.test.Vehicle</class> 
     <class>com.test.driver</class> 
     <properties/> 
    </persistence-unit> 
</persistence> 
+0

如何將其導入到hibernate.cfg.xml – ltt

+0

我忘了:如果您可以使用註釋,則不要使用映射xml。好吧,這可能是脫離主題,對不起。 – znurgl

+0

我需要在其他項目中包含註釋類的導入jar庫 – ltt

0

SaxParser給你一個清晰的答案:映射元素無效。

但我很困惑。如果您使用註釋,並且您不需要項目中的cfg.xml,那麼只需簡單地使用cfg.xml即可。