Java 使用Hibernate作为库
我有一个jar库,它有一些带有持久性注释的类。我的jar库中不需要hibernate.cfg.xml,所以我在导入jar的目标项目中创建了hibernate.cfg.xml。我猜这个hibernate.cfg.xml使用的配置文件与任何在jar库中指定类的.hbm.xml(jar库中存在任何.hbm.xml)一样(我猜这个解决方案在目标项目的hibernate.cfg.xml中带有Java 使用Hibernate作为库,java,hibernate,hibernate.cfg.xml,Java,Hibernate,Hibernate.cfg.xml,我有一个jar库,它有一些带有持久性注释的类。我的jar库中不需要hibernate.cfg.xml,所以我在导入jar的目标项目中创建了hibernate.cfg.xml。我猜这个hibernate.cfg.xml使用的配置文件与任何在jar库中指定类的.hbm.xml(jar库中存在任何.hbm.xml)一样(我猜这个解决方案在目标项目的hibernate.cfg.xml中带有)。如何为jar库编写any.hbm.xml以及如何在hibernate.cfg.xml中使用它 我写这个any.h
)。如何为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
原因:org.hibernate.InvalidMappingException:无法读取XML
位于org.hibernate.internal.util.xml.MappingReader.readMappingDocument(MappingReader.java:109)
位于org.hibernate.cfg.Configuration.add(Configuration.java:478)
位于org.hibernate.cfg.Configuration.add(Configuration.java:474)
在org.hibernate.cfg.Configuration.add上(Configuration.java:647)
位于org.hibernate.cfg.Configuration.addResource(Configuration.java:730)
位于org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:2109)
位于org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:2081)
位于org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2061)
位于org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2014)
位于org.hibernate.cfg.Configuration.configure(Configuration.java:1929)
位于org.hibernate.cfg.Configuration.configure(Configuration.java:1908)
位于ir.mersada.db.HibernateUtil.(HibernateUtil.java:22)
... 还有一个
原因:org.xml.sax.saxpasseeption;行号:6;栏目号:50;必须声明元素类型“映射”。
位于com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:198)
位于com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:134)
位于com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:437)
请访问com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:368)
位于com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:325)
位于com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handlestarelement(XMLDTDValidator.java:1906)
位于com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.emptyElement(XMLDTDValidator.java:763)
在com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:353)
位于com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2717)
位于com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607)
在com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:116)
位于com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:489)
位于com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835)
位于com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
位于com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
位于com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210)
位于com.sun.org.apache.xerces.internal.jaxp.saxpasserimpl$jaxpsaxpasser.parse(saxpasserimpl.java:568)
位于org.dom4j.io.SAXReader.read(SAXReader.java:465)
位于org.hibernate.internal.util.xml.MappingReader.readMappingDocument(MappingReader.java:78)
... 还有12个
我认为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>
org.eclipse.persistence.jpa.PersistenceProvider
com.test.Vehicle
com.test.driver
SaxParser给出了一个明确的答案:mapping元素无效
但我很困惑。如果您使用注释并且在项目中不需要cfg.xml,那么如果您不使用cfg.xml,那么简单的方法就是 如何将其导入hibernate.cfg.xml我忘记了:如果可以使用注释,就不能使用映射xml。好的,对不起,这可能是离题了。我需要在另一个项目中导入包含注释性类的jar库