Hibernate debe ser capaz de comparar y serializar los identificadores. Por lo tanto, la clase de identificador debe ser serializable y anular hashCode() y equals() de forma coherente con la noción de igualdad de clave compuesta de la base de datos.
Si tiene una identificación compuesta mapeada como propiedades de la entidad, la entidad misma es el identificador.
Un segundo enfoque se denomina un identificador compuesto mapeado, donde las propiedades identificador denominado dentro de la > elemento < composite-id se duplican en tanto la clase persistente y una clase de identificador separado
Finalmente, un composite-id puede ser una clase componente. En este caso, la clase de componente es la clase de identificador.
Tenga en cuenta que se recomienda encarecidamente que el ID sea una clase separada. De lo contrario, solo tendrá formas muy incómodas de buscar su objeto utilizando session.get() o session.load().
secciones pertinentes de la documentación referencia:
En este ejemplo, un material compuesto de ID se asignan como propiedades de la entidad. (Lo siguiente asume que está definiendo la clase Empleado).
<composite-id>
<key-property name="EmployeeNumber"/>
<key-property name="Dependent"/>
</composite-id>
class EmployeeAssignment implements Serializable
{
string getEmployeeNumber()
void setEmployeeNumber(string value)
string getDepartment()
void setDepartment(string value)
boolean equals(Object obj)
int hashCode()
}
Un mapeado composite-id:
<composite-id class="EmployeeAssignmentId" mapped="true">
<key-property name="EmployeeNumber"/>
<key-property name="Dependent"/>
</composite-id>
class EmployeeAssignment
{
string getEmployeeNumber()
void setEmployeeNumber(string value)
string getDepartment()
void setDepartment(string value)
}
class EmployeeAssignmentId implements Serializable
{
string getEmployeeNumber()
void setEmployeeNumber(string value)
string getDepartment()
void setDepartment(string value)
boolean equals(Object obj)
int hashCode()
}
un componente como un composite-id:
<composite-id name="Id" class="EmployeeAssignmentId">
<key-property name="EmployeeNumber"/>
<key-property name="Dependent"/>
</composite-id>
class EmployeeAssignment
{
EmployeeAssignmentId getId()
void setId(EmployeeAssignmentId value)
}
class EmployeeAssignmentId implements Serializable
{
string getEmployeeNumber()
void setEmployeeNumber(string value)
string getDepartment()
void setDepartment(string value)
boolean equals(Object obj)
int hashCode()
}
ejemplo confuso. también, ¿qué es 'dependiente' en el ID compuesto? ¿Querías poner 'departamento'? de cualquier manera, sigue siendo un ejemplo confuso. podría aclararse con comentarios para explicarlo. – KyleM
Si deja que la entidad misma sea el identificador, ¿significa eso que los iguales y el código hash solo pueden usar las ID compuestas y no otros campos para verificar la igualdad? – CowZow