映射 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'。"

我该怎么办??

【问题讨论】:

这里没有人??我真的需要帮助。请帮帮我。 StudentCourseTosan.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 映射时出现问题

解析序列/映射节点时出现无效的 yaml 节点错误

尝试在映射服务器上将 XLSM 保存为 CSV 时出现“对象 _workbook 的方法保存失败”错误

使用 @EmbeddedId 映射时出现 Eclipse 错误

RPC:端口映射运行时出现超时错误

intellij 编译 springmvc+hibernate+spring+maven 找不到hbm.xml映射文件