要验证xml,我们需要dtd或xsd。如果我们想要针对dtd验证xml,那么我们需要在Hibernate中编写这个。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
此处PUBLIC表示 hibernate-configuration-3.0.dtd 文件在网络中可用。当我们执行Hibernate程序时,Hibernate应该转到这个URL http://hibernate.org/dtd/hibernate-configuration-3.0.dtd并验证hibernate-configuration.dtd文件。
但我的问题是没有互联网连接,hibernate如何验证配置文件?
我知道hibernate jar中也有 hibernate-configuration-3.0.dtd 文件。但是如果它在我们的文件系统中可用,那么我们需要wtite而不是PUBLIC,我们需要提供文件系统的完整绝对路径,其中 hibernate-configuration-3.0.dtd 文件可用。< / p>
答案 0 :(得分:0)
我也面临同样的问题。我通过编写下面的xml语句来尝试更好的东西
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"hibernate-configuration-3.0.dtd">
用于映射文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"hibernate-mapping-3.0.dtd">
并将这两个文件 hibernate-configuration-3.0.dtd 和 hibernate-mapping-3.0.dtd 放在tomcat服务器的bin目录中。 (我使用的是apache tomcat服务器)。服务器在其当前目录(bin目录)中搜索这些dtd文件。通过这种方式,它解决了我离线运行应用程序的问题。如果有更好的方式,我们总是欢迎。感谢
答案 1 :(得分:0)
如果您指定的URL与Hibernate期望的URL匹配,则不需要Internet连接。
如果URL匹配,则Hibernate使用EntityResolver从Hibernate jar中加载dtd。
例如在Hibernate 3.5中,org.hibernate.util.DTDEntityResolver类:
...尝试将各种systemId URL解析为本地类路径查找
在装入Hibernate类的类加载器中,搜索以http://hibernate.sourceforge.net/开头的任何systemId URL作为类路径资源。
使用classpath作为方案的任何systemId URL(即,首先使用当前线程上下文类加载器,然后使用加载了Hibernate类的类加载器来搜索以classpath://开头的类路径资源。
与上述规则有关的任何无法解析的实体引用都将返回null,这将强制SAX阅读器以其默认方式处理实体引用。
在Hibernate 3.6中,URL前缀已更改为http://www.hibernate.org/dtd/,如更新的DTDEntityResolver
所示在您的情况下,如果您使用的是3.6之前的Hibernate jar,则您的规范将使用外部DTD。您可以更新Hibernate,或为您的Hibernate版本使用正确的URL。
如果要确保您在Hibernate jar中使用DTD,可以使用:
<!DOCTYPE hibernate-configuration SYSTEM "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">