読者です 読者をやめる 読者になる 読者になる

results.size()としてあげないと結果の一覧が正常に取得出来ない件

GAE/J

こんなコード書いてたんですが、

@SuppressWarnings("unchecked")
public List<Hoge> select(HogeCondition condition) throws IOException {
    Preconditions.checkNotNull(condition, "condition");

    PersistenceManager pm = Persistent.createManager();
    try {
        Query q = pm.newQuery(Hoge.class);
        Map<String, Object> params = condition.prepareQuery(q);
        List<Hoge> results = (List<Hoge>) q.execute(params);
        return results;
    }
    catch (JDOException e) {
        throw (IOException) new IOException().initCause(e);
    }
    finally {
        pm.close();
    }
}

これだとorg.datanucleus.exceptions.NucleusUserException: Object Manager has been closedで落ちる。でもdebugでステップ実行すると行ける。そこでメッセージをそのままググってみたら似たよう問題でハマってる人がいてなんとも言えない解決方法が。物は試しなのでやってみたら動くように。でもこれはどうなんだ・・・

@SuppressWarnings("unchecked")
public List<Hoge> select(HogeCondition condition) throws IOException {
    Preconditions.checkNotNull(condition, "condition");

    PersistenceManager pm = Persistent.createManager();
    try {
        Query q = pm.newQuery(Hoge.class);
        Map<String, Object> params = condition.prepareQuery(q);
        List<Hoge> results = (List<Hoge>) q.execute(params);
        results.size();//これないと動かない
        return results;
    }
    catch (JDOException e) {
        throw (IOException) new IOException().initCause(e);
    }
    finally {
        pm.close();
    }
}

一応Issueとして登録されてるみたい。