ここにあるようにバグにより
親のオブジェクト、子のオブジェクトのキーはKeyにする必要があるようです。
※子は仕様にも記述してありますけどね。
まず親側のクラスを
class Shop {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent(mappedBy = "shop")
private List<Image> imageList;
・・・getter,setterは未記述
}
と記述します。
Keyは通常のIDENTITY(Longで自動設定した場合)と同一で、特に登録などの際に
設定する必要はありません。
そして子のクラスを
class Image {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent
private Shop shop;
・・・getter,setterは未記述
}
というように記述します。
で登録は以下のようにします。
PersistenceManager pm = SessionManager.get().getPersistenceManager();
Transaction tx = null;
try {
String id = mogForm.getId();
Long lngId = Long.valueOf(id);
tx = pm.currentTransaction();
tx.begin();
log.warning(id);
Shop oldShop = pm.getObjectById(Shop.class, lngId);
List<Image> imageList = oldShop.getImageList();
if ( imageList == null ) {
imageList = new ArrayList<Image>();
}
imageList.add(image);
image.setShop(oldShop);
tx.commit();
} finally {
if ( tx != null && tx.isActive() ) {
tx.rollback();
}
pm.close();
}
Shopを検索してImageListを取得して
そこに追加を行ってコミットをかけています。
トランザクションをかけてあげないとエラーになります。
このクラスを登録するというより、親に追加して更新しているイメージです。
※子の追加でも可能かは検証してません。
扱っているShopクラスのidの値は
KeyクラスのgetId()により取得したLong値(Stringで使ってる)になります。
そのまま使用すると"Shop(4)"みたいな値になって検索の際にエラーになります。
・・・あぁ。。。やっとこさ関連が実装できた!
0 件のコメント:
コメントを投稿