5

Kiedy tworzę klasę, która określa zarówno "gae.encoded-pk" i "gae.pk-id" persistent, kodowany-pk jest aktualizowany, ale id pozostaje zerowy . Nie ma wyjątku, a kod jest prostą kopią z dokumentacji google, więc nie mam pojęcia, co może się tu wydarzyć.Datanucleus gae.pk-id nie został wypełniony przy makePersistent

Klasa definiuje:

@PersistenceCapable 
public class MyClass { 
    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    @Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true") 
    private String encodedKey; 

    @Persistent 
    @Extension(vendorName="datanucleus", key="gae.pk-id", value="true") 
    private Long keyId; 

I sprawiają, że uporczywe tak:

PersistenceManager pm = PMF.get().getPersistenceManager(); 
try { 
    pm.makePersistent(myInstance); 
    // myInstance = pm.makePersistent(myInstance); - Produces the same result. 
} finally { 
    pm.close(); 
} 

Używam debugera do kroku przez ten kod, ale KeyID pozostaje null, nawet po menedżer trwałości jest zamknięty.

Chciałbym również zwrócić uwagę, że jest to działa lokalnie przy użyciu zestawu narzędzi Google Appengine. Wszelkie wskazówki dotyczące tego, jak mogę to debugować, byłyby bardzo mile widziane!

+0

ten sam problem tutaj – craigrs84

Odpowiedz

1

znalazłem tej odpowiedzi:

Wtyczka GAE JDO tylko kiedykolwiek ustawia „gae.pk-id”/„gae.pk-name” field gdy wczytuje się w polu oznaczonym że z magazynu danych (po prostu wyszukuj w bagażniku SVN, FetchFieldManager jest jedynym miejscem, w którym jest załadowany - nie ustawia go, gdy robi to PUT). Nie mam pojęcia, co to było w wersji 1.x, ale wszystkie testy GAE przechodzą w 2.x, tak jak w 1.x. Ale ta "cecha" nie jest w każdym razie standardowym JDO, więc mało mnie interesuje.

Zobacz: Unable to get ID of newly-created JDO persistent entity using GAE/J DataNucleus plug-in version 2.1.2