我正在将一个应用程序从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文件的教程或示例。
有谁能请我摆脱苦难?
答案 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。