やっとわかったというかなんというか。
@PersiceCapable(Identify..........................)
public class Test
@Persistent
User user;
@Persistent
List<String> data;
void testSave (User user,String x) {
PersistenceManager pm = PMF.getPersistenceManager();
Query q = pm.newQuery(Test.class);
q.setFilter("user == userParam");
q.declareVariables("String userParam");
List<Test> testList = q.execute(user);
Test test = null;
if ( testList.size() == 0 ) {
test = new Test();
test.data = new ArrayList<String>();
pm.makePersistent(test);
} else {
test = testList.get(0);
}
test.data.add(string);
pm.close();
}
こういうコード書いてたのですが、この書き方がダメだったみたいです。
makePersistentしても、ArrayListが適合しないせいで、
test.data.addこれの実行がデータベースに反映されなかったみたい。
test.data.addしてからmakePersistentしないと、データが保存されない。
つまりif文で分岐したら、そのまま分けて書かないとダメなんですね。
ということは、makePersistantは最初のオブジェクトだともう一度クローズして
読み直すか、dettachするしかないのかな。
上のコードは、該当部分から抜き出してデフォルメしてるので、
そのまま動く人もいるかもしれません。ちょっと検はしてないです。
> > - 引用テキストを表示 -- 引用テキストを表示しない -
>
> - 引用テキストを表示 -