hbm.xml可插入外部xml文件替换重复使用的内容。例如我这里对User进行分表,将使用user0、user1、user2之类的表,因此hbm映射文件内容基本都是一样的。可使用ENTITY声明插入外部的xml片段。
如dbmap/User.hbm.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
[<!ENTITY UserProperty SYSTEM "classpath://dbmap/UserProperty.xml">]>
<hibernate-mapping package="model">
<class
name="User0"
table="user0"
lazy="false"
>
&UserProperty;
</class>
<class
name="User1"
table="user1"
lazy="false"
>
&UserProperty;
</class>
</hibernate-mapping>
hibernate3.2以上版本支持ENTITY使用classpath://协议。
如果classpath://dbmap/UserProperty.xml这个路径找不着文件,会报出一个很让人误解的异常:
org.dom4j.DocumentException: unknown protocol: classpath Nested exception
应该提示路径找不到,而不是提示不支持这个协议。
其中dbmap/UserProperty.xml:
<?xml encoding="utf-8"?>
<id
name="id"
type="string"
column="id"
>
<generator class="assigned"/>
</id>
<property
name="name"
column="name"
type="string"
not-null="false"
length="20"
/>
<property
name="passwd"
column="passwd"
type="string"
not-null="false"
length="20"
/>