私のGoogle App Engineアプリケーションでは、しばらくの間、以下のjdoを永続化しました。
package com.acti.JDO;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
import com.google.appengine.api.datastore.Key;
@PersistenceCapable
public class Subscription {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key ;
public Key getKey() {
return key;
}
public void setKey(Key key) {
this.key = key;
}
@Persistent
private String email;
@Persistent
private String clientID;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getClientID() {
return clientID;
}
public void setClientID(String clientID) {
this.clientID = clientID;
}
}
後で clientID を clientId に変更したかったのですが、
@Persistent
private String clientId;
public String getClientId() {
return clientId;
}
public void setClientID(String clientId) {
this.clientId = clientId;
}
それに応じて変更を加え、以前の jdo エンティティを削除し、新しい「clientId」キーで jdo の永続化を開始しました。データストアには clientId しか表示されませんが、サブスクリプション jdos を取得しているときに取得するキーは「ClientID」です
jdoエンティティを取得しようとしているコードは以下のとおりです
public ArrayList<Subscription> getSubscriptionJDOs(String queryParam)
{
ArrayList<Subscription> subscriptionJDOList = null;
PersistenceManager persistentManager = null;
Query query = null;
try
{
subscriptionJDOList = new ArrayList<Subscription>();
persistentManager = JdoUtil.get().getPersistenceManager();
query = persistentManager.newQuery(Subscription.class, queryParam);
subscriptionJDOList.addAll((List<Subscription>) query.execute());
}
catch(Exception ex)
{
log.info("Subscription Exception while getting the the subscription JDOs ::"+ex.getMessage());
}
return subscriptionJDOList;
}
しかし、私が取得しようとしている jdos には、clientId ではなくキー clientID があります。App Engine インスタンスを強制終了しようとして、もう一度試しました。まだ解決していません。誰もがなぜこれが起こっているのか知っています。
前もって感謝します!