【问题标题】:NHibernate mapping files: DOCTYPE still not supported?NHibernate 映射文件:DOCTYPE 仍然不支持?
【发布时间】:2018-04-25 23:04:03
【问题描述】:

在 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我明白了 DOCTYPE 功能已从 NHibernate 中删除(几年前),尽管它仍然记录在 NHibernate 参考文档中 版本:5.1,第 8.1.6 章。

我也找不到文档化的休眠配置属性来允许 DOCTYPE 处理。

DOCTYPE 仍然不受支持吗? (然后我将不得不尝试不同的映射方法)。

【问题讨论】:

  • DOCTYPE 不能是网络库中 XML 文件的第一行。通常,xml ident 行将是第一行。
  • 是的,我知道,我确实只显示了我的映射文件的相关部分

标签: c# xml nhibernate-mapping


【解决方案1】:

由于网上找不到DOCTYPE的解决方案,所以选择了不同的映射方式:

  • 将我的常用程序集的类设为abstract“基类”
  • 在映射文件中也声明了这个类abstract="true",并且 删除了 &lt;any... 部分
  • 从我的业务模型程序集中的基类派生一个类
  • 将后者映射为&lt;union-subclass ...与我现有的数据库表,并将&lt;any...部分与所有业务模型特定的&lt;meta-value ...定义放在此处

我还必须将代码中的new“基类”替换为new“派生类”,但这是可以接受的,因为所有这些地方都在我的业务模型程序集中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 2010-12-08
    • 1970-01-01
    • 2022-07-22
    相关资源
    最近更新 更多