按照视频讲解配置下列文件:
<class name="Employee" discriminator-value = "0">
<id name="id">
            <generator class="native"></generator>
</id>
<property name="name"/>
<discriminator column = "type" type = "int"/>
<many-to-one name="department" column = "depart_id"></many-to-one>
<subclass name = "Skiller" discriminator-value = "1" >
<property name = "skill"/>
</subclass>
<subclass name = "Sales" discriminator-value = "2" >
<property name = "sell"/>
</subclass>
</class>
报错为:
元素类型为 "class" 的内容必须匹配 "(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)*)"。最后去官网看了一下,按照他的配置改还是报这个错,求各位大神指导hibernate

解决方案 »

  1.   

    加入subclass标签之后报的错,hibernate版本为4.2.2
      

  2.   

    看了看配置,没什么大的问题,我不知道你的映射包是怎么写的,举个简单例子,你把Employee,Skiller,Sales这3个类放在了com.test.demo.bean这个package下,并且Skiller,Sales都继承Employee这个类,
    public class Employee implements Serializable
    {
    //id,name,type ,department属性
    }public class Skiller
    extends Employee implements Serializable
    {//skill属性
    }public class Sales
    extends Employee implements Serializable
    {
    //sell属性
    }
    而配置文件package如下,Employee这个类映射emp_table这张表。
    <hibernate-mapping package="com.test.demo.bean">
    <class name="Employee"  table="emp_table"  discriminator-value = "0">
    <id name="id">
                <generator class="native"></generator>
    </id>
    <property name="name"/>
    <discriminator column = "type" type = "int"/>
    <many-to-one name="department" column = "depart_id"></many-to-one>
    <subclass name = "Skiller" discriminator-value = "1" >
    <property name = "skill"/>
    </subclass>
    <subclass name = "Sales" discriminator-value = "2" >
    <property name = "sell"/>
    </subclass>
    </class>
    </hibernate-mapping>而数据库表emp_table表里有id ,name ,type ,depart_id ,skill ,sell这几个字段 ,其中type为0的表示普通employee,1的时候表示skill,2的是的sales。你想好好理解一下,然后再按照我的修改,如果还有问题,继续
      

  3.   

    哦哦哦,囧了,貌似找到问题了
    我好像没有写extends Employee,下班回去看看
      

  4.   

    回家一看,继承关系都写了,郁闷了!下午在看cache视频时,老师说,<cache>标签要写在id标签的前面,突然意识到标签要排序,再看下报错发现<discriminator>在<property>的前面,结果真相就这样大白了……