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
miałem podobny problem, a to jeden rozwiązał to dla mnie! – adis
Świetna wskazówka! Głupi problem ... –