2009-11-23 2 views
0

그래서 나는 여기에서 아이디어를 얻기 위해 짚으로 꽉 잡고있다. (또한 참고 :이 간헐적 인 문제)hibernate ehcache는 컬렉션의 1 요소를 찾는다.

을 내가 '아이'개체의 컬렉션과 함께 '부모'개체가 있습니다

< 부모의 물건>
을 ...
< 세트 이름을 = " 어린이 "역 ="true "를 주문에 의해 ="child_id ">
< 캐시 사용 ="읽기 - 쓰기 "/>
< 키 열 ="PARENT_ID "/>
< 일대 클래스 =" ChildClass "/>
</설정>
...
</부모>

< 아이 물건>
...
< 대일 = "부모"
열 = "PARENT_ID"
이름 삽입 = "true"를
갱신 = "true"를
하지 널 = "true"를
클래스 = "에 ParentClass"
인덱스 = "idx_child_parent"/> ...
</어린이>

내가 좋아하는 쿼리를 실행하는 경우 : 는 "ChildClass에 아이 어린이를 선택합니다"+ "child.parent = 부모 "; 모든 자식을 찾습니다. 완전한.

그러나 부모 개체를 검색하여 찾으면 최대 절전 모드가 실행되어 내 ParentClass가 생성되지만 자식의 첫 번째 자식 만 채워집니다. 사실 최대 절전 모드 코드로 디버깅하고 그 사실을 발견 ParentClass에 대한 setChildren()에 대한 호출은 오직 하나의 요소 컬렉션을 보냈습니다 - 내가 첫 번째 쿼리에서 더 많은 것을 알았을 때.

그래서, 나는 EHCache를 사용하고 있으며이를 지우는 것이 좋지 않습니다. CacheManager.getInstance(). clearAll();을 호출하십시오.

내 응용 프로그램을 다시 시작하면 작업이 완료됩니다. 부모의 겉보기에 무작위적인 인스턴스에서 잠시 후에 깨지기 만하면됩니다.

이 문제를 직접 일으키는 일은 (내가 아는) 것이 없습니다. 누구나이 버그를 일으키는 최대 절전 버그 나 EHCache 버그를 알고 있습니까? 내 캐시에서 분명히 명확하게 전화하고 있습니까?

모든 포인터가 좋을 것입니다.

나는 최대 절전 모드 3.2.6을 사용하고 있으며, mysql과 postgres에서도 같은 문제가 발생한다.

편집 : 1 개 요소 만있는이 컬렉션은 일종의 '존재하지 않은'상태에 추가해야합니다. 즉. 하위 요소가 하나만있는 트랜잭션이 없었습니다

답변

1

검토를받을 때 한 지점에서 "결합 가져 오기"를 수행하는 것으로 나타났습니다. 조인 가져 오기는 하위 모음에 대해 내 where 절과 일치하는 하위 항목 만 반환 함을 의미합니다. 그래서 내가 3 자녀> 10 및 1 자식 < 10, 어디에 내 자식 말하면 < 10, 그것은 하나의 자식을 포함하는 자녀 세트와 부모 개체를 반환합니다. 그렇습니다. "join fetch"가 목적입니다.

잘못된 점은 Ehcache가이 부모 개체가 "불완전"하다는 것을 알지 못하기 때문에이 불완전한 값을 캐시에 저장합니다. 다음 번에 나는 "완전한"부모 객체를 원한다. 나는 그것을 얻지 못한다. 나는 불완전한 것을 얻는다. 그리고 Hibernate doesnt는 그렇지 않다면 나에게 말해 준다.

편집 : 노트, 우연히 일어날 때마다 그것은 단지 하나의 자식 요소였습니다. 더있을 수 있습니다.

2

하위 클래스 implement hashcode() and equals() correctly이 있습니까?Hibernate가 같은 부모 클래스에 동등한 것으로 연결되어있는 하나의 자식 클래스를 볼 수있을 가능성이 있습니까?

+0

'hashCode()': – Bozho

+0

잘못된 것이면 유감스럽게 생각합니다. 틀린 아이들을 일관되게 반환 할 것입니다. 그러나 어쨌든 두 번 확인했는데 정확합니다. 아이디어를 주셔서 감사합니다. – gcrain

관련 문제