使用hibernate 4和hbm.xml以及xsd

时间:2013-06-26 08:40:20

标签: hibernate hbm

经过大量的谷歌搜索后,现在感到困惑和沮丧。

我正在将一个应用程序从Hibernate 3升级到4.这很适合使用dtd 3.0,但现在需要使用4.0 xsd,这就是每个东西都以apex为基础的地方!

该应用程序使用hbm.xml文件配置每个实体,无需任何注释。

查找hbm文件的示例非常有用,但即使是hibernate 4的教程也只使用3.0 dtd!

我正在使用以下

<hibernate-mapping
    xmlns="http://www.hibernate.org/xsd/hibernate-mapping"
    xsi:schemaLocation="http://www.hibernate.org/xsd/hibernate-mapping hibernate-mapping-4.0.xsd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    package="org.hibernate.metamodel.binding">

使用这个我得到一个错误的根本原因是

  

引起:org.xml.sax.SAXParseException; lineNumber:6; columnNumber:51; cvc-elt.1:找不到元素'hibernate-mapping'的声明。

我对多个Google页面的阅读表明我仍然需要一个令人困惑的doctype,我认为我只是误会,当我添加doctype时,Eclipse会抱怨hibernate-mapping元素的定义。忽略该错误(仅限于eclipse配置问题)与运行时错误相同:

  

必须为元素类型“hibernate-mapping”

声明属性“xmlns”

我无法找到使用hibernate 4 xsd的hbm.xml文件的教程或示例。

有谁能请我摆脱苦难?

2 个答案:

答案 0 :(得分:0)

关于“xmlns”attrribute的消息有点令人困惑,尽管您所要做的就是从hibernate-mapping元素中删除所有属性并仅保留package属性。至少,它对我有用。

答案 1 :(得分:0)

试试这个:

<?xml version="1.0" encoding="UTF-8"?>

<hibernate-mapping package="your.package.name"
    xmlns="http://www.hibernate.org/xsd/hibernate-mapping"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.hibernate.org/xsd/hibernate-mapping
        http://www.hibernate.org/xsd/hibernate-mapping/hibernate-mapping-4.0.xsd">

    <!-- your mappings --->

</hibernate-mapping>

请注意,这指向外部地址(http://www.hibernate.org)。

理想情况下,我们会使用Hibernate在hibernate-core中打包的本地XSD文件.jar。

我不知道Hibernate是否拦截这些请求并返回本地副本like Spring does