关于hibernate中报错”The content of element type "class" must match ......“的一点发现

来源:互联网 发布:易道打车软件 编辑:程序博客网 时间:2024/05/16 02:29

今天用hibernate测试subclass映射时发现了代码顺序影响程序运行的现象


  • 会报错的代码如下
    把配置辨别者列的代码放到其他property之后,例如:
 <class name="Person" table="PERSONS" discriminator-value="PERSON">        <id name="id" type="java.lang.Integer">            <column name="ID" />            <generator class="native" />        </id>        <property name="name" type="java.lang.String">            <column name="NAME" />        </property>        <property name="age" type="int">            <column name="AGE" />        </property>        <!-- 配置辨别者列 -->        <discriminator column="TYPE" type="string"></discriminator>        <!-- 使用subclass 进行子类映射 -->        <subclass name="Student" discriminator-value="STUDENT">            <property name="school" type="string" column="SCHOOL"></property>        </subclass>    </class>
这个时候就会出现报错
The content of element type "class" must match  "(meta*,subselect?,cache?,synchronize*,comment?,tuplizer*,(id|composite-id),discriminator?,natural-id?, (version|timestamp)?,(property|many-to-one|one-to-one|component|dynamic-component|properties| any|map|set|list|bag|idbag|array|primitive-array)*,((join*,subclass*)|joined-subclass*|union- subclass*),loader?,sql-insert?,sql-update?,sql-delete?,filter*,fetch-profile*,resultset*,(query|sql-query)*)".

  • 不会报错的代码
    当把配置辨别者列的代码直接放在id的配置之后,如下:
 <class name="Person" table="PERSONS" discriminator-value="PERSON">        <id name="id" type="java.lang.Integer">            <column name="ID" />            <generator class="native" />        </id>         <!-- 配置辨别者列 -->        <discriminator column="TYPE" type="string"></discriminator>        <property name="name" type="java.lang.String">            <column name="NAME" />        </property>        <property name="age" type="int">            <column name="AGE" />        </property>        <!-- 使用subclass 进行子类映射 -->        <subclass name="Student" discriminator-value="STUDENT">            <property name="school" type="string" column="SCHOOL"></property>        </subclass>    </class>

这样就不会报错了,虽然不知道是什么道理,不过误打误撞把问题解决了。。

不知道有没有大神可以做出合理的解释

0 0
原创粉丝点击