0

休止状態のセッションに本当に苦労しています。変更されたセッション オブジェクトに対してクエリを実行したときに期待する結果が得られません。私の問題はすべて関連していると思います。最後のものは次のとおりです。

final Session iSession = AbstractDAO.getSessionFactory().openSession();
try {
    iSession.beginTransaction();
    MyObject iObject = DAOMyObject.getInstance().get(iSession,ObjectId);
    iObject.setQuantity(0); //previously the quantity was different from zero
    DAOMyObject.getInstance().update(iSession,iObject);
    DAOMyObject.getInstance().deleteObjectWithZeroQuantities(iSession);
    iSession.getTransaction().commit();
} catch (final Exception aException) {
    iSession.getTransaction().rollback();
    logger.error(aException.getMessage(), aException);
    throw aException;
} finally {
    iSession.close();
}

私が取得していないのは、オブジェクトが削除されない理由です。セッションでオブジェクトを変更したため、削除を行うクエリはそれを見つける必要があります。セッションでインクリメンタル ID を持つオブジェクトを作成し、コミット前に同じセッションでselect max(id)+1. しかし、セッションは毎回同じ数のIDを取得します。

4

2 に答える 2

0

あなたはする必要がありsession.flush()ます。

オブジェクトの変更はメモリ内にのみあり、フラッシュまでDBに永続化されます。または、 を に設定するFlushModeCOMMIT、すべてのコミットもフラッシュされます。ただし、毎回手動でフラッシュすることをお勧めします。

于 2013-06-29T22:25:56.457 に答える