7

Mam aplikację 2.0.4, która chce zmodyfikować wiersze w db.PlayFramework 2 + Ebean - surowe zapytanie Aktualizacja sql - nie ma wpływu na db

muszę zaktualizować „kilka” wiadomości w db do stanu „otwarty” (czytaj wiadomości) Zrobiłem to jak poniżej

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(); 

Mam zmodyfikowano PostgreSQL zapisywać wszystkie pytania.

modifiedCount to rzeczywista liczba zmodyfikowanych wierszy - ale zapytanie jest w transakcji. Po wykonaniu zapytania w bazie danych znajduje się ROLLBACK - więc nie zostanie wykonana aktualizacja. Próbowałem zmienić db do H2 - z tym samym wynikiem.

To zapytanie z dziennika kontroli 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 

..........

dokumentacja play Framework i Ebean docs - twierdzi, że nie ma żadnej transakcji/jeśli nie zostały zgłoszone lub przejściowe w razie potrzeby na zapytanie /.

Więc ... Zrobiłem podstęp

Ebean.beginTransaction(); 
    int modifiedCount = update.execute(); 
    Ebean.commitTransaction(); 
    Ebean.endTransaction(); 
    Logger.info("update mod = " + modifiedCount); 

Ale to nie ma znaczenia - to samo zachowanie ...

Ebean.execute(update); 

Ponownie - to samo ..

Następny Zrobiłem krok - Zatwierdziłem metodę z

@Transactional(type=TxType.NEVER) 

i

@Transactional(type=TxType.MANDATORY) 

Żadne z nich nie miało znaczenia.

jestem tak sfrustrowany Ebean :( Każdy może pomóc, proszę

BTW ustawić

Ebean.getServer(null).getAdminLogging().setDebugGeneratedSql(true); 
    Ebean.getServer(null).getAdminLogging().setDebugLazyLoad(true); 
    Ebean.getServer(null).getAdminLogging().setLogLevel(LogLevel.SQL); 

zobaczyć w konsoli grać na zapytanie -. Inne pytania są rejestrowane - ta aktualizacja - nie

Odpowiedz

1

myślę, trzeba użyć surowego sql zamiast rachunku createSqlUpdate

4

prostu usunąć początkową przestrzeni.. ..Yes..I nie mógł w to uwierzyć ... zmianę z "UPDATE ... do" UPDATE ...

I to wszystko ...

+0

miałem podobny problem, a to jeden rozwiązał to dla mnie! – adis

+0

Świetna wskazówka! Głupi problem ... –

Powiązane problemy