2009-12-18 5 views
6

해시 코드 및 엔터티를 구현하는 것이 일반적으로 좋은 방법인지 여부를 처리하는 가장 좋은 방법을 추론하려했습니다 (일반적인 의미의 엔터티를 의미 함). 하지만 대부분의 경우 JPA 엔티티가됩니다). http://docs.jboss.org/hibernate/core/3.3/reference/en/html/best-practices.html가이 말한다 수동 최대 절전 모드의 제 24 장에서같음 및 해시 코드 또는 엔티티 클래스에 대한 질문이 없습니다.

...

모든 엔티티에서 자연 키를 식별하고 을 사용하여지도. equals() 및 hashCode()를 구현하여 자연 키를 구성하는 속성을 비교하십시오.

.equals 및 .hashcode에는 이러한 자연 키만 포함될 수 있지만 동일한 엔터티 (동일한 자연어 ID 및 동일한 해시 코드) 인스턴스가 두 개 이상있는 경우에는 무엇이 좋을까요? 이 관행이 응용 프로그램의 다른 곳에서 미묘한 영향을 미칠 수있는 것처럼 보입니다. 전에 대규모로 시도한 사람이 있습니까?

답변

3

동등 물이 단지 키가 되길 원할 때 동등 물이 모든 특성과 시간을 비교하기를 원하는 경우가 있습니다. 우리는 명시적인 도우미 클래스를 사용하여 훨씬 더 많은 성공을 거두었으므로 비교 대상에 대한 모호성은 없습니다.

ByKeyComparer.Equals... 
ByPropertiesComparer.Equals... 

또는

Entity1.EqualsByKey... 
Entity1.EqualsByProperties... 
+1

어떤 의미가 키를 기준으로 동일하지만 특성에 의해 동일하지 않은 것으로 확인합니까? 그것은 가치에 의해서가 아니라 평등에 의한 것과 같습니다. –

+3

새 엔티티에는 기본 키가 없습니다 (표준 방법 인 대리 키를 사용하는 경우). 따라서 키를 사용하여 비교할 경우 equals가 새 엔티티에서 작동하지 않습니다. –

+0

어떤 메소드를 영속 클래스'equals()'와'hashcode()'메소드에 사용합니까? Collection 또는 Hibernate 코드에 의해 호출 될 것이기 때문에 이들에 대한 선택이 필요합니다. –

6

대규모로 (또는 적어도 최대 절전 모드를 많이 사용하는 응용 프로그램에서) 이것을 시도했습니다. 좋은 생각이야.

.equals 및 .hashcode에는 이러한 자연 키만 포함될 수 있지만 동일한 엔터티 (동일한 자연어 ID 및 동일한 해시 코드) 인스턴스가 두 개 이상있는 경우에는 무엇이 좋을까요? 이 관행이 응용 프로그램의 다른 곳에서 미묘한 영향을 미칠 수있는 것처럼 보입니다.

이것이 의미하는 바입니다. 일반적으로 을 비교하려면 .equals를 비교할 때 동일한 엔터티의 복수 인스턴스가이고 원하는 경우 다른 곳에서는 해당 함축을 의미합니다. IMO 그 의미는 일들이 예상대로 작동한다는 것입니다.