クライアント側に 2 つのクラスを作成し、それらは GWT JDO を使用して保存されます。
親クラスは次のようになります。
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Park implements Serializable{
@PrimaryKey
@Persistent
private String parkId;
//...
@Persistent(mappedBy = "park", defaultFetchGroup = "true")
private List<Facility> facilityList;
// other stuff
子は次のようになります。
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Facility implements Serializable{
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
@Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true")
private String encodedKey;
@Persistent
private Park park;
// other stuff
サーバー側では、すべてを取得する方法があります。
public Park[] getParks(){
PersistentManager pm = getPersistentManager();
ArrayList<Park> parkList = new ArrayList<Park>();
try {
Query q = pm.newQuery(Park.class);
List<Park> parks = (List<Park>) q.execute();
for(Park p:parks)
parkList.add(p);
} finally {
pm.close();
}
return parkList.toArray(new Park[parkList.size()]);
}
このメソッドを呼び出すと、例外がスローされます:
com.google.gwt.user.client.rpc.SerializationException: Type 'org.datanucleus.store.types.sco.backed.ArrayList' was not included in the set of types whichこの SerializationPolicy によってシリアル化できるか、その Class オブジェクトを読み込めませんでした。セキュリティ上の理由から、この型はシリアル化されません。
何が悪いのかわかりません。どんな提案でも大歓迎です。