2012-04-12 3 views
0

여기 내 시나리오입니다 (나는 datanucleus, JDO를 사용하고 있습니다,하지만 그것은 또한 JPA에 적용 생각) : 위의 코드에서
객체에서 persist()를 수행 할 때 JDO/ORM의 동작은 무엇입니까?

tx.begin(); 
Dog d = new Dog(); 
persistenceManager.persist(d); 
d.setName("Doggie"); 
tx.commit(); 

, 이름이 "강아지가"데이터베이스에 지속되지 않습니다. 그러나 수행 할 때

tx.begin(); 
Dog d = new Dog(); 
d.setSize(10); 
persistenceManager.persist(d); 
Dog d2 = dogDao.getDogBySize(10); 
d2.setName("Doggie"); 
tx.commit(); 

작동합니다!

첫 번째 예에서 개체가 관리되지 않는 반면 "두 번째"개가 데이터베이스에서 가져온 관리되는 인스턴스라는 사실 때문에이 동작이 발생합니까?

JDO 관련 동작입니까?

감사합니다.

+1

왜 로그를 보지 않으시겠습니까? 결국 당신을 도울 것입니다 ... – DataNucleus

답변

0

실제로 위 코드에서 이름을 업데이트하면 데이터 저장소에 표시됩니다. 실행할 때. 그리고 실제로 로그를 볼 때 이름의 최신 값을 가진 단일 INSERT를 얻을 때 낙관적 인 txns를 사용하지 않는 한 persist에 대한 INSERT와 UPDATE를 매우 명확하게 볼 수 있습니다.

관련 문제