Hibernate должен уметь сравнивать и сериализовать идентификаторы. Таким образом, класс идентификатора должен быть сериализуемым и переопределять hashCode () и equals () в соответствии с представлением базы данных о равенстве составного ключа.
Если у вас есть составной идентификатор, сопоставленный как свойства объекта, сам объект является идентификатором.
Второй подход называется сопоставленным составным идентификатором, в котором свойства идентификатора, названные внутри элемента <составной-идентификатор>, дублируются как для постоянного класса, так и для отдельного класса идентификаторов
Наконец, составной идентификатор может быть классом компонента. В этом случае класс компонента является идентификатором класса.
Обратите внимание, что настоятельно рекомендуется иметь идентификатор в отдельном классе. В противном случае у вас будут только очень неуклюжие способы поиска вашего объекта с использованием session.get () или session.load ().
Соответствующие разделы справочной документации:
В этом примере составной идентификатор отображается как свойства объекта. (Ниже предполагается, что вы определяете класс Employee).
<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()
}
Составной составной идентификатор:
<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()
}
Компонент в качестве составного идентификатора:
<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()
}