play framework postgresql transactions playframework-2.0 sql-update ebean

postgresql - PlayFramework 2+Ebean-Consulta de actualización Sql en bruto-no tiene efecto en db



playframework ebean (2)

Creo que tienes que usar raw sql en lugar de la declaración createSqlUpdate.

Tengo una aplicación de play framework 2.0.4 que quiere modificar filas en db.

Necesito actualizar ''pocos'' mensajes en db al estado "abierto" (leer mensajes) Lo hice como abajo

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

He modificado el postgresql para registrar todas las consultas.

modifiedCount es el número real de filas modificadas, pero la consulta está en transacción. Después de que la consulta se realiza en el archivo db, se produce ROLLBACK, por lo que no se realiza la ACTUALIZACIÓN. Intenté cambiar db por H2, con el mismo resultado.

Esta es la consulta del registro de auditoría 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

..........

La documentación de Play Framework y los documentos de Ebean establecen que no hay transacción / si no se ha declarado o transitoria si es necesario por consulta /.

Entonces ... he hecho el truco

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

Pero esto no hace diferencia, el mismo comportamiento ...

Ebean.execute(update);

De nuevo, lo mismo ...

El siguiente paso lo hice: anoté el método con

@Transactional(type=TxType.NEVER)

y

@Transactional(type=TxType.MANDATORY)

Ninguno de ellos hizo la diferencia.

Estoy tan frustrado con Ebean :( Cualquiera puede ayudar, por favor?

Por cierto. lo puse

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

para ver en la consola Play la consulta - se registran otras consultas - esta actualización - no


simplemente elimine el espacio inicial ... Sí ... No lo podía creer tampoco ... cambie de "ACTUALIZAR ... a" ACTUALIZAR ...

Y eso es todo...