映射 hbm 文件时出现错误“命名空间中的元素 'class' 具有无效的子元素 'set'”
Posted
技术标签:
【中文标题】映射 hbm 文件时出现错误“命名空间中的元素 \'class\' 具有无效的子元素 \'set\'”【英文标题】:error "The element 'class' in has invalid child element 'set' in namespace " when mapping hbm file映射 hbm 文件时出现错误“命名空间中的元素 'class' 具有无效的子元素 'set'” 【发布时间】:2018-12-22 17:05:42 【问题描述】:H 想在我的应用程序中使用继承,但是当我运行时,我的 hbm 映射文件有错误。我的代码在这里
public class StudentDao
public virtual int Id get; set;
public virtual string FirstName get; set;
public virtual string LastName get; set;
public virtual StudentDegreeType Degree get; set;
public virtual string Field get; set;
public virtual IEnumerable<StudentCourse> StudentCourses get; set;
我的映射文件是:
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping assembly="Tosan.Sevrice.DataAccess" namespace="Tosan.Sevrice.DataAccess.Dao" xmlns="urn:nhibernate-mapping-2.2">
<class name="StudentDao" table="STUDENTT" lazy="true" >
<id name="Id" column="ID" >
<generator class="increment"> </generator>
</id>
<discriminator column="Degree"/>
<property name="FirstName" column="FIRSTNAME" />
<property name="LastName" column="LASTNAME" />
<!--<property name="Degree" column="DEGREE" />-->
<property name="Field" column="FIELD" />
<subclass name="MasterStudent" discriminator-value="1">
<property name="َArticle" />
</subclass>
<subclass name="BachelorStudent" discriminator-value="2">
</subclass>
<set name="StudentCourses" table="StudentCourse" inverse="true" cascade="all,delete-orphan">
<key column="ID"/>
<one-to-many class="StudentCourse"/>
</set>
</class>
</hibernate-mapping>
我在我的文件映射'set'中使用了一个关系标签
我的孩子班是:
public class BachelorStudent : StudentDao
和下一个子类:
public class MasterStudent : StudentDao
public virtual bool Article get; set;
在我运行这个之后,下面的错误就出来了:
“命名空间 'urn:nhibernate-mapping-2.2' 中的元素 'class' 在命名空间 'urn:nhibernate-mapping-2.2' 中具有无效的子元素 'set'。预期的可能元素列表:'subclass, loader,命名空间 'urn:nhibernate-mapping-2.2' 中的 sql-insert、sql-update、sql-delete、filter、resultset、query、sql-query'。"
我该怎么办??
【问题讨论】:
这里没有人??我真的需要帮助。请帮帮我。StudentCourse
在 Tosan.Sevrice.DataAccess.Dao
namespace
中吗?否则,它至少需要一个完全限定的名称。 StudentDegreeType
是 NHibernate 可以映射的吗?否则它需要一张自己的地图
实际上这是一个奇怪的错误,它表示 XML 无效,但 Nhib 文档提供了相同的元素结构...
【参考方案1】:
set 元素需要在子类元素之前定义。即:
<set name="StudentCourses" table="StudentCourse" inverse="true" cascade="all,delete-orphan">
<key column="ID"/>
<one-to-many class="StudentCourse"/>
</set>
<subclass name="MasterStudent" discriminator-value="1">
<property name="َArticle" />
</subclass>
<subclass name="BachelorStudent" discriminator-value="2">
</subclass>
【讨论】:
以上是关于映射 hbm 文件时出现错误“命名空间中的元素 'class' 具有无效的子元素 'set'”的主要内容,如果未能解决你的问题,请参考以下文章
在 SQL Server 中的非主键上添加 @ManyToOne 映射时出现问题
尝试在映射服务器上将 XLSM 保存为 CSV 时出现“对象 _workbook 的方法保存失败”错误