Ich habe eine Play Framework 2.0.4 Anwendung, die Zeilen in db ändern möchte.PlayFramework 2 + Ebean - Raw Sql Update-Abfrage - hat keine Auswirkungen auf die Db
Ich brauche ‚paar‘ Nachrichten in db in den Zustand „geöffnet“ (lesen Sie Nachrichten) zu aktualisieren Ich habe es wie unten
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();
ich die postgresql geändert haben alle Abfragen zu protokollieren.
modifiedCount ist die tatsächliche Anzahl der geänderten Zeilen - aber die Abfrage ist in der Transaktion. Nach der Abfrage in der Datenbank gibt es ROLLBACK - also das UPDATE wird nicht gemacht. Ich habe versucht, db zu H2 zu ändern - mit dem gleichen Ergebnis.
Dies ist die Abfrage von Postgres Audit-Log
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
..........
Play-Framework-Dokumentation und Ebean docs - besagt, dass es keine Transaktion ist/wenn nicht deklariert oder transient, falls erforderlich pro Abfrage /.
So ... Ich habe den Trick
Ebean.beginTransaction();
int modifiedCount = update.execute();
Ebean.commitTransaction();
Ebean.endTransaction();
Logger.info("update mod = " + modifiedCount);
gemacht, aber das macht keinen Unterschied - das gleiche Verhalten ...
Ebean.execute(update);
wieder - die gleichen ..
Weiter Schritt ich tat - Ich meldete die Methode mit
@Transactional(type=TxType.NEVER)
und
@Transactional(type=TxType.MANDATORY)
Keiner von ihnen machte einen Unterschied.
Ich bin so frustriert mit Ebean :( jemand helfen kann, bitte
BTW Ich habe
Ebean.getServer(null).getAdminLogging().setDebugGeneratedSql(true);
Ebean.getServer(null).getAdminLogging().setDebugLazyLoad(true);
Ebean.getServer(null).getAdminLogging().setLogLevel(LogLevel.SQL);
die Abfrage in der Play-Konsole zu sehen -. Andere Abfragen protokolliert werden - dieses Update - nicht
Ich hatte ein ähnliches Problem, und dieses man hat es für mich gelöst! – adis
Toller Hinweis! Dummes Problem ... –