2010-06-25 5 views
1

내 문제는 내가이 전화 한 후 객체 A의 "병합"을 만들 때 B의 목록 " 병합 후 플러시() 문제 엔터티

@Entity 
class A { 

    @OneToMany(cascade={CascadeType.MERGE}) 
    List<B> list; 

} 

개체가 들어있는 개체 A를 가지고있다 상태 비 저장 EJB 메소드 내에서 "플러시"

em.merge(a); //a is of class A 
em.flush(); //doesn't flush "list" 

실제로 작동하지 않습니다. "list"의 B 객체의 id는 설정되지 않습니다.

그러나 지속 및 세척 작업 "목록"의 B 객체의

em.persist(a); 
em.flush(); // it works! 

ID입니다 설정됩니다.

EclipseLink를 사용하고 있습니다. 아무도 무슨 일이 일어날 지 알고 있습니까?

+0

아래 답변의 소음 때문에 (일부 친구?) 질문이 심각하고 확인을 얻을 때까지 더 이상 시간을 보내지 않을 것입니다. 그 사람들이 당신의 친구라면, 조금 가르쳐 주어야합니다. –

+0

이 질문은 일종의 스팸 자석입니다. – bmargulies

+0

@Pascal, @bmargulies; 더러운 상태에서 청소하고 보호합니다. 깃발 주셔서 감사. –

답변

0

목록 "목록"의 일부인 B 개체의 ID가 설정되어 있지 않기 때문에 실제로 작동하지 않습니다. 객체가 List에있는 동안 당신은 equals/hashCode을 구현하기 위해 ID를 사용하지 않아야합니다

는 계약 변경하지 마십시오. 어쨌든, 나는 EclipseLink 2.0에 대한 문제를 재현 할 수 없다. A 병합은 B을 목록에 추가 할 때 B에 삽입을 계단식으로 연결한다.