当前位置: 首页 > 知识库问答 >
问题:

Hibernate错误,可能与DTD声明有关

萧焱
2023-03-14

我们的项目使用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)

共有2个答案

易弘亮
2023-03-14

我也从hibernate 3迁移到4,

用于Hibernate。cfg公司。我使用以下DTD的xml文件

<代码>

对于映射文件,我使用以下DTD:

<代码>

如果我更改dtd,则会出现异常,因为hibernate 4使用xsd而不是dtd。Hibrenate Jira将dtd迁移到xsd

因此,您必须使用xsd文件而不是dtd。

Hibernate hbm示例

麻超
2023-03-14

我也刚刚从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循环声明了一个新的变量,其阴影外。将其变成平原以解决问题。 顺便说一下,为了获得相同的精度和更快的速度,您可以尝试以下实现,该实现一次执行两个步骤: