这是一个基本的 XML 构造,称为实体包含。您名为“allproperties.xml”的文件将包含实体的属性映射片段。例如:
<property name="name".../>
<property name="someOtherProperty".../>
<!-- rest of shared property definitions -->
然后在映射文件中你会说:
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" [
<!ENTITY allproperties SYSTEM "allproperties.xml"> ]>
<hibernate-mapping>
<class name="Class1" ...>
<id .../>
&allproperties;
</class>
<class name="Class2" ...>
<id .../>
&allproperties;
</class>
</hibernate-mapping>
我<id/>
在这里定义了每个类中的映射,但是如果信息都相同,您也可以将其移动到包含文件中。任何作为子级有效的内容<class/>
都可以在包含文件中使用。
JAXP 期望 SYSTEM 引用是相对或绝对文件引用。所以上面意味着 allproperties.xml 文件将相对于包含文件的系统标识符进行解析。通常这可能效果不佳。为此,Hibernate 还理解以 classpath:// 为前缀的特殊类型的 SYSTEM 引用。正如您所料,这会触发对引用资源的类路径资源查找。
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" [
<!ENTITY allproperties SYSTEM "classpath://com/acme/allproperties.xml"> ]>
现在,allproperties.xml 将通过使用 com/acme/allproperties.xml 资源名称的类路径查找来解析。