Hibernate는 식별자를 비교하고 직렬화 할 수 있어야한다. 따라서 식별자 클래스는 직렬화 가능해야하며 데이터베이스의 복합 키 동등성 개념과 일관되게 hashCode() 및 equals()를 재정의해야합니다.
엔티티의 속성으로 매핑 된 합성 ID가있는 경우 엔티티 자체가 식별자입니다. < 복합 ID > 소자 내부라는 식별자 속성 영속 클래스와 별도의 식별자 클래스
마지막으로, 복합 ID 월 모두 중복되는 두 번째 방법은 매핑 복합 식별자라고
, 컴포넌트 클래스가 될 수 있습니다. 이 경우 구성 요소 클래스는 식별자 클래스입니다.
ID를 별도의 클래스로 만드는 것이 좋습니다. 그렇지 않으면 session.get() 또는 session.load()를 사용하여 객체를 조회하는 방법이 매우 어색 할 것입니다. 참조 문서의
관련 부분이 예에서는
는 복합 ID는 엔티티의 속성으로 매핑된다. 다음은 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()
}
A는 복합 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()
}
복합-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()
}
예를 혼란. 또한 composite-id에 '종속'이란 무엇입니까? '부서'를 넣으려고 했습니까? 어느 쪽이든, 여전히 혼란스러운 예입니다. 그것을 설명하는 설명을함으로써 명확해질 수있다. – KyleM
엔티티 자체가 식별자가되게하면 equals 및 hashcode는 복합 ID의 to를 사용할 수 있고 다른 필드는 같지 않음을 확인할 수 있습니까? – CowZow