2010-03-12 6 views
0

Collection<Bar> bars이 포함 된 엔터티 클래스 Foo foo이 있습니다. 다양한 방법을 시도했지만 컬렉션을 성공적으로 업데이트 할 수 없습니다.JPA를 사용하여 컬렉션 업데이트 중 문제가 발생했습니다

한 시도 :

foo = em.find(key); 
foo.getBars().clear(); 
foo.setBars(bars); 
em.flush; \\ commit, etc. 

이것은 이전에 새 컬렉션을 추가합니다.

또 다른 시도 :이 시점에서

foo = em.find(key); 
bars = foo.getBars(); 
for (Bar bar : bars) { 
    em.remove(bar); 
} 
em.flush; 

, 나는 내가 새 컬렉션을 추가 할 수 있다고 생각,하지만 난 엔티티 foo는이 전멸 된 것을 찾을 수 있습니다.

다음은 몇 가지 특수 효과입니다. 푸에 : 바에서

@OneToMany(cascade = { CascadeType.ALL }, mappedBy = "foo") 
private List<Bar> bars; 

:

@ManyToOne(optional = false, cascade = { CascadeType.ALL }) 
@JoinColumn(name = "FOO_ID") 
private Foo foo; 

다른 사람이이에 문제가 있었나요? 어떤 아이디어?

답변

2

CascadeType.ALLprivate Foo foo에서 제거하고 을 제거한 후에 foo.getBars().clear()을 호출하면 두 번째 방법이 효과적입니다. 당신이 당신의 두 번째 방법에 Bar의를 제거 할 때 CascadeType.ALLCascadeType.REMOVE 포함되어 있기 때문에

현재, 제거, 해당 Foo 단체에 전달됩니다.

+0

내가 얻을 것을 시도 : 'javax.persistence.EntityNotFoundException : [com.Bar # ]' –

+0

@FarmBoy이 :. 지속에 전달 삭제 된 개체 또한)'명확한 foo.getBars을 (호출해야합니다 ()'를 제거합니다. – axtavt

+0

이제는 고마워. –

관련 문제