2009-06-02 1 views
3

(모든) DTO에 모든 것을 복사하지 않고도 여러 서버의 데이터베이스에서 JPA Entity를 유지할 수 있습니까?여러 JPA Entity를 여러 데이터베이스 (분산 시스템)에서 유지하는 방법은 무엇입니까?

우리는 분산 시스템을 가지고 있습니다. 일부 응용 프로그램에는 캐싱을위한 DB가 있습니다. JPA Provider는 분리 된 객체를 유지할 수 없다는 불만을 던진 Exception을 throw합니다.

하지만 나는이 추가 DB에 계속 유지하면서 엔티티의 ID를 보존하고 싶습니다.

(JPA 1.2, EJB 3.0, 글래스 피시 2.1, TopLink Essentials를)

답변

3

이 em.persist하지 마십시오 (OBJ), 단지 때 em.merge (OBJ). 병합은 연결된 객체와 분리 된 객체 모두에서 작동합니다.

분리 된 개체로 시작하는 경우 해당 개체를 해당 EntityManagers와 병합합니다. 개체간에 ID 키를 동일하게 유지하려는 경우 병합 된 첫 번째 개체에서 키를 가져 와서 나중에 사용합니다.

한 EM이 관리하는 개체를 다른 EM으로 병합하려고 시도하고 싶지 않을 수도 있습니다. 이것을 테스트하여 효과가 있는지 확인할 수 있습니다. 시도하면 어떻게 될지 모릅니다.

So.

YourEntity unattachedEntity = ... // your original entity object. 

YourEntity managedEntity = em1.merge(unattachedEntity); 

// managedEntity now has the primary key assigned by the DB 
unattacheEntity.setPrimaryKey(managedEntity.getPrimaryKey()); 

em2.merge(unattachedEntity); 
em3.merge(unattachedEntity); 

정상 작동해야합니다.

+0

정말 고마워요! 정말 효과가있었습니다! 당신의 대답은 대단히 도움이되었습니다! 이전에 병합을 시도했지만, 두 엔티티를 사용하여 마술 트릭하지 않았습니다. – SAL9000

관련 문제