子类连接具有多对多的组件

时间:2014-10-13 03:18:42

标签: java hibernate many-to-many hibernate-mapping

我有这个词:

class Persona{
 id
 name
 ...
}

class Cliente extends Persona{
 Date medicalRecord
 ...
}

class Empleado extends Persona{
 Especialidad specs
 int points
 ...
}

class Especialidad{
   ...
}

class EmpleadoEspecialidad{
   long id
   Empleado emp
   Especialidad esp
}

我有这个映射:

    <class name="Persona" table="persona">
        <id name="ID" type="long" unsaved-value="null">
            <column name="persona_id" index="id_index" />
            <generator class="identity" />
        </id>

        <discriminator column="per_tipo" force="true" insert="true" not-null="true" />
        <subclass name="Cliente" discriminator-value="cliente">
            <join table="cliente">
                <key column="cl_id" />
            </join>
        </subclass>
        <subclass name="Empleado" discriminator-value="empleado">
            <join table="empleado">
                <key column="em_id" />
            </join>
        </subclass>
    </class>
</hibernate-mapping>

使用此表:

+-----------------------+
| Tables                |
+-----------------------+
| cliente               |
| empleado              |
| empleado_especialidad |
| especialidad          |
| persona               |
+-----------------------+

我想在Empleado添加一个或多个对象类型Especialidad并在表empleado_id上保存每条记录(especialidad_idempleado_especialidad)从Especialidad获取Empleado直接列表(如List<Especialidad> getListOfEspecialidad()) 我怎么能这样做呢?

我想要多对多,因为在我的应用程序的某些部分,我必须列出来自某些Empleado的所有especialidad

我试过这个:

<component name="component" >
    <list name="list" table="empleado_especialidad" cascade="all">
        <key column="em_id" />
        <index column="es_id" />
        <one-to-many class="Especialidades" not-found="ignore" />
    </list>
</component>

子类Empleado的内部连接,但是每个记录都转到表especialidad,其中我有一个对象especialidad的列表(可由用户配置),我不能使用它多个especialidad上的Empleado

我希望在这种情况下使用数据库:

Persona
id:1 Name:Emp1
id:2 Name:EmpOfMonth

Empleado:
id:1 points:10
id:2 points:5

Especialidad
id:1 name:Especialidad1
id:2 name:EspecialidadX
id:3 name:Especialidad2
id:4 name:EspecialidadN

EmpleadoEspecialidad
emp_id:1 esp_id:1
emp_id:1 esp_id:3
emp_id:2 esp_id:2
emp_id:2 esp_id:1
emp_id:2 esp_id:3

1 个答案:

答案 0 :(得分:0)

解决方案是改变这个:

<one-to-many ... />

到这个

<many-to-many ... />