2012-11-05 5 views
0

JPA가 엔티티를 추가/업데이트하는 방법과 약간 혼동됩니다.JPA EclipseLink 엔티티 추가/업데이트

public void save (Object e) { 
    em.merge(e); 
    em.flush(); 
} 

:

AltContact c = new AltContact("test"); 
save(c) 
System.out.println("ENTITY: " + contains(c)); 
c.setEnterpriseName("test2"); 
save(c); 
System.out.println("ENTITY: " + contains(c)); 

저장 방법은 EntityManager의에 병합을 요청하는 내 응용 프로그램의 서버 측에서 간단한 방법입니다 :

ATM, 나는이 코드 조각이 안에EntityManager의 인스턴스입니다.

은 서버 측에서 다시 한번 현재 엔티티가 존재하는지를 엔티티 관리자에게 물어볼 방법입니다.

위의 코드는 내 테이블에 두 개의 행을 만듭니다. 첫 번째 행은 "test"값이고 다른 행은 "test2"값입니다. 이것은 내가 원한 것이 아닙니다.

값 "test"로 새 행을 작성한 다음 행 작성 직후에 갱신하고 값을 "test2"로 설정하려고합니다. 나는 의 반품을 로 전화 한 후을 포함하여, false 두 번 돌려주었습니다.

내가 나의 실체 내가 다시 저장 전화 그래서 저장 에 대한 첫 번째 호출 후 지속적인 환경의 일부가 아닌 사실에서 오는 문제를 추측, 엔티티 관리자는 새로운 기업의 생각과를 만들 새로운 행.

어떻게 업데이트 프로세스를 수행 할 수 있습니까?

+0

나는이 질문에 대한 답변 (http://stackoverflow.com/a/1070629/1256525)으로 비슷한 문제를 해결해야한다고 생각합니다. – semTex

답변

1

몇 가지. 먼저 왜 병합을 사용해야합니까() 인스턴스를 직렬화하고 있습니까, 그 이유는 무엇입니까? 영속 컨텍스트에서 반환 된 객체 만 편집하면 병합이나 저장을 수행 할 필요가 없습니다.

개체를 직렬화 또는 분리하여 편집해야하는 경우 새 개체의 경우 저장 개체에서 개체 ID를 반환해야하므로 분리 개체와 관리 대상 개체를 연결합니다. 이상적으로는 객체를 편집하기 전에 find()를 실행하여 객체를 가져 오는 것이 좋습니다.

관련 문제