我们的项目使用Hibernate的编程配置来设置SessionFactory等。我刚刚将我们从Hibernate的版本3迁移到了版本4。现在我得到了一个错误“Element type”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">
到
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
但这并不能纠正错误。发生了什么事?在另一个使用Hibernate的XML配置文件的项目中,我进行了相同的迁移,结果很好。请注意,在我的环境中必须使用classpath,DTD不能从internet或任何类似的地方下载。无论如何都不应该这样。
编辑:以下是请求的例外:
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)
我也从hibernate 3迁移到4,
用于Hibernate。cfg公司。我使用以下DTD的xml文件
<代码>
对于映射文件,我使用以下DTD:
<代码>
如果我更改dtd,则会出现异常,因为hibernate 4使用xsd而不是dtd。Hibrenate Jira将dtd迁移到xsd
因此,您必须使用xsd文件而不是dtd。
Hibernate hbm示例
我也刚刚从3.0迁移到4.0,我假设我使用以下DTD的3个原因
这种情况下的实际修复
确保路径中没有任何旧的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">
对于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">
对我来说效果很好。
可能原因2
您拼错了<代码>
编辑:
我使用编程和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();
}
我的问题帮助我解决了这个问题。
总体建议
完全程序化是个坏主意。因为从列到变量映射到变量类型,您需要添加很多程序化的东西。这将是一场调试噩梦。我建议为无需程序化即可完成的事情做非程序化的事情。对我来说,我只需要从cmd行获取用户名密码,这样我就可以在任何服务器上部署产品。所以我只是把它变成了程序化的。
问题内容: 我们的项目使用Hibernate的程序来设置我们的SessionFactory等。我只是将我们从Hibernate的版本3迁移到了版本4。现在,我收到错误消息“必须声明元素类型“ hibernate-mapping”。它说是SaxParseException。很好,一切都很好,但是我检查了WEB-INF / lib目录,并找到了Hibernate的版本4核心.jar文件,因此它位于类路
我正处于学习RichFaces和JSF2.x的阵痛中。我在这里使用了一个教程,Eclipse标记了faces-config声明 null
问题内容: 编译错误: 解决办法? 问题答案: Java不允许您在函数局部内部类内定义非最终静态字段。只允许顶级类和静态嵌套类具有非最终静态字段。 如果您要在班级中添加一个字段,请将其放在班级级别,如下所示:
问题内容: 我在基于linux的(arm)通信应用程序中的不可预测的时间遇到以下错误: Google出现了很多有关该错误的参考,但几乎没有与我的情况相关的信息。我想知道是否有人可以给我一些有关如何解决此错误的想法。有谁知道这个断言的共同原因? 提前致谢。 问题答案: 连续4天坚如磐石。我要宣布这一点的胜利。答案是“愚蠢的用户错误”(请参阅上面的评论)。互斥锁只能由锁定它的线程来解锁。感谢您
今天我想从SQLCe转到MongoDB。我下载了驱动程序,并在我的电脑上运行本地服务器。 以下是我的实际代码(顺便说一句,我甚至不知道将IMongoCollection转换为MongoCollection是否安全): 但是,每当我试图运行该程序时,就会出现以下错误:“System”类型的未处理异常。木卫一。mscorlib中发生FileNotFoundException。动态链接库 其他信息:无法
问题内容: 我收到此错误消息,说我没有使用变量……但是在我的菜鸟眼中,看起来我在: 谁能指出我对语言的缺失?我认为这与vs 和作用域有关,但我不确定。 问题答案: 在您的for循环声明了一个新的变量,其阴影外。将其变成平原以解决问题。 顺便说一下,为了获得相同的精度和更快的速度,您可以尝试以下实现,该实现一次执行两个步骤: