在Java-Hibernate(4.2版)中,我使用一个功能在其他XML文档中方便地包含其他XML文档:
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"[
<!ENTITY authorizables SYSTEM "classpath://authorizables.xml">
]>
...
<any name="Authorizable" meta-type="string" id-type="long">
&authorizables; <!-- application specifc meta-value definitions for Authorizables with long-ID -->
...
</any>
和authorizables.xml(驻留在不同的包和jar文件中)包含具体类
<meta-value value="Spiel" class="otherpackage.class1"/>
<meta-value value="Team" class="otherpackage.class1"/>
在NHibernate 5.1(对于C#)中,我尝试了相同的映射方法,但得到异常
NHibernate.MappingException
+ InnerException {"DTD is prohibited in this XML document ... System.Exception {System.Xml.XmlException}
从这篇(相当古老的)帖子Using Doctype in Nhibernate我明白了这一点 虽然NHibernate参考文档中仍记录了DOCTYPE功能(几年前)已从NHibernate中删除 版本:5.1,第8.1.6章。
我也找不到记录的hibernate配置属性来允许DOCTYPE处理。
DOCTYPE仍然不受支持吗? (然后我将尝试不同的映射approch)。
答案 0 :(得分:0)
由于我在网上找不到DOCTYPE的解决方案,我选择了不同的映射方法:
abstract
&#34;基类&#34; abstract="true"
删除了<any
...部分<union-subclass
...与我现有的数据库表,并在此处放置<any
...部分,其中包含所有特定于业务模型的<meta-value
...定义我还必须替换new
&#34;基类&#34;在我的代码中使用new
&#34;派生类&#34;,但这是可以接受的,因为所有这些地方都在我的商业模式汇编中。