我们的项目使用Hibernate的程序Configuration设置来设置SessionFactory等.我只是将我们从版本3迁移到了Hibernate的第4版.现在我收到错误"元素类型"hibernate-mapping"必须声明".它说的是SaxParseException.这很好,但我检查了我的WEB-INF/lib目录和Hibernate的4版核心.jar文件,所以它在类路径上.
起初我认为这是因为Hibernate团队从中迁移了
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
Run Code Online (Sandbox Code Playgroud)
至
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
Run Code Online (Sandbox Code Playgroud)
但这并不能解决错误.到底是怎么回事?在我使用Hibernate的XML配置文件的单独项目中,我做了相同的迁移,并且它很好.请注意,在我的环境中必须使用类路径,无法从Internet或类似的地方下载DTD.反正不应该这样.
编辑:这是所要求的例外情况:
Caused by: org.xml.sax.SAXParseException; systemId: ; lineNumber: 6; columnNumber: 20; Element type "hibernate-mapping" must be declared.
at org.apache.xerces.framework.XMLParser.reportError(XMLParser.java:1213)
at org.apache.xerces.validators.common.XMLValidator.reportRecoverableXMLError(XMLValidator.java:1807)
at org.apache.xerces.validators.common.XMLValidator.validateElementAndAttributes(XMLValidator.java:3633)
at org.apache.xerces.validators.common.XMLValidator.callStartElement(XMLValidator.java:1229)
at org.apache.xerces.framework.XMLDocumentScanner$ContentDispatcher.dispatch(XMLDocumentScanner.java:938)
at org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentScanner.java:381)
at org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1098)
Run Code Online (Sandbox Code Playgroud)
Sid*_*rth 10
我也刚刚从3.0迁移到4.0,我假设3个原因我使用以下DTD
在这种情况下的实际固定
确保路径中没有任何旧的3.0 jar,否则您可以看到此异常.
可能的原因1
对于hibernate.cfg.xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
Run Code Online (Sandbox Code Playgroud)
而对于hbm文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
Run Code Online (Sandbox Code Playgroud)
对我来说效果很好.
可能的原因2
您<hibernate-mapping>的hbm文件中有拼写错误.
编辑:
我使用混合配置programmatic和cfg文件.当我尝试使用所有程序时,它对我不起作用.我也没有得到太多的帮助.但下面对我有用.
try {
String connection = "jdbc:mysql://"
+ Globals.DBSERVER.trim()
+ "/myDB?autoReconnect=true&failOverReadOnly=false&maxReconnects=10";
log.debug("Connection URL "+connection) ;
Configuration configuration = new Configuration();
configuration
.setProperty("hibernate.connection.url", connection)
.setProperty("hibernate.connection.username", Globals.DB_USER_NAME.trim())
.setProperty("hibernate.connection.password", Globals.DB_PASSWORD.trim())
;
configuration.configure();
sessionFactory = configuration
.buildSessionFactory(new ServiceRegistryBuilder()
.applySettings(configuration.getProperties()).buildServiceRegistry());
} catch (Exception e) {
log.fatal("Unable to create SessionFactory for Hibernate");
log.fatal(e.getMessage());
log.fatal(e);
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
我的问题帮助我解决了这个问题.
总体建议
所有程序化都是一个坏主意.由于存在大量编程内容,因此需要从列添加到变量映射到变量类型.这将是一场调试噩梦.我建议你做一些非程序化的东西,你可以在没有程序化的情况下做.对我来说,我只需要从cmd行获取用户名密码,这样我就可以在任何服务器上部署产品.所以我只是做了那个程序化的.
| 归档时间: |
|
| 查看次数: |
18838 次 |
| 最近记录: |