2012-04-12 11 views
0

Hier ist mein Szenario (Ich verwende Datanucleus, JDO, aber ich denke, es ist zu JPA gilt auch):
Was ist das Verhalten von JDO/ORMs, wenn ein persist() für ein Objekt ausgeführt wird?

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

In dem obigen Code, der Name "Hund" in der Datenbank nicht persistent ist. Wenn jedoch

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

funktioniert es tun!

Ist dieses Verhalten auf die Tatsache zurückzuführen, dass mein "zweiter" Hund irgendwie eine verwaltete Instanz ist, die aus der Datenbank genommen wird, während im ersten Beispiel das Objekt nicht verwaltet wird?

Ist es ein JDO-spezifisches Verhalten?

Danke!

+1

Warum nicht nur auf das Protokoll schauen? Es ist da um dir doch zu helfen ... – DataNucleus

Antwort

0

In dem obigen Code ist tatsächlich die Aktualisierung auf den Namen im Datenspeicher vorhanden ... wenn ich es ausführe. Und tatsächlich, wenn Sie das Protokoll betrachten, sehen Sie eine sehr klare INSERT für die Persistenz und dann ein UPDATE, es sei denn, Sie verwenden optimistische txns, wenn Sie eine einzige INSERT mit dem letzten Wert von name bekommen.