7

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

Antwort

1

ich glaube, Sie rohen sQL statt createSqlUpdate Anweisung zu verwenden, haben

4

nur den Anfangsraum entfernen.. ..Yes..I konnte es auch nicht glauben ... Wechsel von „UPDATE ... zu“ UPDATE ...

Und das ist alles ...

+0

Ich hatte ein ähnliches Problem, und dieses man hat es für mich gelöst! – adis

+0

Toller Hinweis! Dummes Problem ... –