您的位置:首页 > 其它

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

2015-07-25 22:38 246 查看

今天用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>


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

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: