Ho un'applicazione di gioco framework 2.0.4 che vuole modificare le righe in db.PlayFramework 2 + Ebean - query Sql raw di aggiornamento - non ha effetto su db
Ho bisogno di aggiornare 'alcuni' messaggi in db per lo stato "aperto" (leggere i messaggi) ho fatto come qui di seguito
String sql = " UPDATE message SET opened = true, opened_date = now() "
+" WHERE id_profile_to = :id1 AND id_profile_from = :id2 AND opened IS NOT true";
SqlUpdate update = Ebean.createSqlUpdate(sql);
update.setParameter("id1", myProfileId);
update.setParameter("id2", conversationProfileId);
int modifiedCount = update.execute();
Ho modificato il PostgreSQL per registrare tutte le query.
modifiedCount è il numero effettivo di righe modificate, ma la query è in transazione. Dopo che la query è stata eseguita nel db, c'è ROLLBACK, quindi l'UPDATE non viene eseguito. Ho provato a cambiare db in H2 - con lo stesso risultato.
Questa è la query dal log di audit Postgres
2012-12-18 00:21:17 CET : S_1: BEGIN
2012-12-18 00:21:17 CET : <unnamed>: UPDATE message SET opened = true, opened_date = now() WHERE id_profile_to = $1 AND id_profile_from = $2 AND opened IS NOT true
2012-12-18 00:21:17 CET : parameters: $1 = '1', $2 = '2'
2012-12-18 00:21:17 CET : S_2: ROLLBACK
..........
documentazione Riproduzione quadro e documenti Ebean - afferma che non v'è nessuna transazione/se non dichiarato o transitorio se necessario per query /.
Allora ... ho fatto il trucco
Ebean.beginTransaction();
int modifiedCount = update.execute();
Ebean.commitTransaction();
Ebean.endTransaction();
Logger.info("update mod = " + modifiedCount);
Ma questo non fa differenza - lo stesso comportamento ...
Ebean.execute(update);
Anche in questo caso - lo stesso ..
Successivo passo ho fatto - ho annunziato il metodo con
@Transactional(type=TxType.NEVER)
e
@Transactional(type=TxType.MANDATORY)
Nessuno di loro ha fatto la differenza.
Sono così frustrato con Ebean :( Chiunque può aiutare, per favore
BTW ho impostato
Ebean.getServer(null).getAdminLogging().setDebugGeneratedSql(true);
Ebean.getServer(null).getAdminLogging().setDebugLazyLoad(true);
Ebean.getServer(null).getAdminLogging().setLogLevel(LogLevel.SQL);
di vedere in console gioco query -?. Altre query vengono registrati - questo aggiornamento - non
ho avuto un problema simile, e questo l'ho risolto per me! – adis
Ottimo suggerimento! Problema stupido ... –