关于hibernate中hbm.xml文件报错的解决

来源:互联网 发布:java log4j 写入文件 编辑:程序博客网 时间:2024/06/08 07:55

报错信息片断如下:

     [java] log4j:WARN No appenders could be found for logger (org.hibernate.cfg
.Environment).
     [java] log4j:WARN Please initialize the log4j system properly.
     [java] org.hibernate.InvalidMappingException: Could not parse mapping docum
ent from resource Customer.hbm.xml
     [java]     at org.hibernate.cfg.Configuration.addResource(Configuration.jav
a:569)
     [java]     at org.hibernate.cfg.Configuration.parseMappingElement(Configura
tion.java:1587)
     [java]     at org.hibernate.cfg.Configuration.parseSessionFactory(Configura
tion.java:1555)
     [java]     at org.hibernate.cfg.Configuration.doConfigure(Configuration.jav
a:1534)
     [java]     at org.hibernate.cfg.Configuration.doConfigure(Configuration.jav
a:1508)
     [java]     at org.hibernate.cfg.Configuration.configure(Configuration.java:
1428)
     [java]     at org.hibernate.cfg.Configuration.configure(Configuration.java:
1414)
     [java]     at Test.main(Unknown Source)
     [java] Caused by: org.hibernate.InvalidMappingException: Could not parse ma
pping document from invalid mapping
     [java]     at org.hibernate.cfg.Configuration.addInputStream(Configuration.
java:502)
     [java]     at org.hibernate.cfg.Configuration.addResource(Configuration.jav
a:566)
     [java]     ... 7 more
     [java] Caused by: org.xml.sax.SAXParseException: 文档根元素“hibernate-mapp
ing”必须与 DOCTYPE 根“hibernate-configuration”匹配。

在按照《纯hibernate学习(包含小实例)》一文中的过程进行学习时,出现了上述问题,因为我用的是hibernate3.2和DB2-9,具体的下载的文件的名字是:hibernate-3.2.5.ga.zip     &      db2exc_912_WIN_x86.zip

所以一直以为是数据库连接和hibernate.cfg.xml文件配置引起的问题。后来在网上也没有找到具体的原因。最后发现是由于*.hbm.xml文件头元素<!DOCTYPE>引起的:

错误的DOCTYPE: 

<!DOCTYPE hibernate-mapping PUBLIC
 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 "
http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  

正确的DOCTYPE:

<!DOCTYPE hibernate-mapping PUBLIC
 "-//Hibernate/Hibernate Mapping DTD//EN"
 "
http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

于是看出hibernate3.2还是沿用了以前3.2之前的版本的DOCTYPE书写规范。也许这是我个人遇到的问题,但是感觉确实小问题有时候也真的让人搞到愤怒。具体为啥会这样,我也不太清楚。还请高手提示一下啊!

------------------Hibernate3.2.5 连接 DB2exc9的具体配置----------------------------

下面我把具体的把我配置文件和映射文件给出,希望能给大家提供方便,并欢迎及时交流。

hibernate.cfg.xml文件的具体代码如下:

<?xml version="1.0"?>
<!DOCTYPE hibernate-configuration PUBLIC
 "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 "
http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory name="java:/hibernate/HibernateFactory">
<property name="show_sql">true</property>
<property name="connection.driver_class">COM.ibm.db2.jdbc.app.DB2Driver</property>
<property name="connection.url">jdbc:db2:hib_test</property>
<property name="connection.username">administrator</property>
<property name="connection.password"> hdwt41092900hdwt</property>
<property name="dialect">org.hibernate.dialect.DB2Dialect</property>
<mapping resource="Customer.hbm.xml"/>
</session-factory>
</hibernate-configuration>

1.请大家注意:在hibernate.cfg.xml文件中的DOCTYPE和Customer.hbm.xml文件中的DOCTYPE是不一样的,但是hibernate.cfg.xml不报错,所以我也很奇怪,并且hibernate.cfg.xml文件中的DOCTYPE用的还是hibernate3.2.5中自带的例子中用到的。

Customer.hbm.xml的具体代码如下:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
 "-//Hibernate/Hibernate Mapping DTD//EN"
 "
http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
 <class name="Customer" table="CUSTOMER">
 <id type="java.lang.Integer" name="id" column="CID" length="4" unsaved-value="null">
            <generator class="increment"/>
    </id>
 <property type="string" name="username" column="USERNAME" length="12">
    </property>
 <property type="string" name="password" column="PASSWORD" length="12">
    </property>
 </class>
</hibernate-mapping>

原创粉丝点击